From 59e7bba3cdb3dec289a9eac8da105f79094916fc Mon Sep 17 00:00:00 2001 From: wanggang <76527413@qq.com> Date: Thu, 9 Jan 2020 17:53:18 +0800 Subject: [PATCH] update Former-commit-id: 1dc17b1a3a81ca4f93b5906784794d57243b5ca3 --- projects/Infrastructure/Web/BaseStartup.cs | 4 ++ .../Infrastructure/Web/JwtTokenValidator.cs | 3 +- .../Controllers/ProductController.cs | 19 +++++ .../UserCenter/Controllers/TokenController.cs | 4 +- projects/WebUI/wwwroot/pc.js | 71 ++++++++++++++++++- projects/WebUI/wwwroot/pchome.js | 8 ++- 6 files changed, 101 insertions(+), 8 deletions(-) create mode 100644 projects/IoTCenter/Controllers/ProductController.cs diff --git a/projects/Infrastructure/Web/BaseStartup.cs b/projects/Infrastructure/Web/BaseStartup.cs index 59b13f23..7430f5d5 100644 --- a/projects/Infrastructure/Web/BaseStartup.cs +++ b/projects/Infrastructure/Web/BaseStartup.cs @@ -219,6 +219,10 @@ namespace Infrastructure.Web { OnTokenValidated = context => { + if (DateTime.UtcNow > context.SecurityToken.ValidTo) + { + context.Fail(""); + } return Task.CompletedTask; }, OnForbidden = context => diff --git a/projects/Infrastructure/Web/JwtTokenValidator.cs b/projects/Infrastructure/Web/JwtTokenValidator.cs index d986196a..e5106eb1 100644 --- a/projects/Infrastructure/Web/JwtTokenValidator.cs +++ b/projects/Infrastructure/Web/JwtTokenValidator.cs @@ -38,5 +38,4 @@ namespace Infrastructure.Web return new ClaimsPrincipal(new ClaimsIdentity(claims, JwtBearerDefaults.AuthenticationScheme)); } } - -} +} \ No newline at end of file diff --git a/projects/IoTCenter/Controllers/ProductController.cs b/projects/IoTCenter/Controllers/ProductController.cs new file mode 100644 index 00000000..97d75a57 --- /dev/null +++ b/projects/IoTCenter/Controllers/ProductController.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; + +namespace IoTCenter.Controllers +{ + [ApiVersion("1.0")] + [Route("api/v{version:apiVersion}/[controller]/[action]")] + [ApiController] + public class ProductController : Controller + { + public IActionResult Index() + { + return View(); + } + } +} \ No newline at end of file diff --git a/projects/UserCenter/Controllers/TokenController.cs b/projects/UserCenter/Controllers/TokenController.cs index 31e718a4..243d8f34 100644 --- a/projects/UserCenter/Controllers/TokenController.cs +++ b/projects/UserCenter/Controllers/TokenController.cs @@ -17,7 +17,6 @@ namespace UserCenter.Controllers [ApiVersion("1.0")] [Route("api/v{version:apiVersion}/[controller]/[action]")] [ApiController] - [Produces(MediaTypeNames.Application.Json)] public class TokenController : ControllerBase { private readonly IConfiguration _cfg; @@ -113,8 +112,7 @@ namespace UserCenter.Controllers var token = Request.HttpContext.ReadToken(refreshToken); if (DateTime.UtcNow > token.ValidTo) { - ModelState.AddModelError("", "已过期"); - return Unauthorized(ModelState); + return Unauthorized(ModelState.AddModelError("已过期")); } var userName = token.Claims.FirstOrDefault(o => o.Type == ClaimTypes.Name).Value; return Ok(new diff --git a/projects/WebUI/wwwroot/pc.js b/projects/WebUI/wwwroot/pc.js index 60944b63..a53c8724 100644 --- a/projects/WebUI/wwwroot/pc.js +++ b/projects/WebUI/wwwroot/pc.js @@ -19,10 +19,77 @@ function connect() { }); } } +/// +//var request = function (url, data, success, method) { +// this.url = url; +// this.data = data; +// this.method = method || 'get'; +// this.success = success; +// if (this.method == 'get') { +// axios.get(url, data) +// } +// else { + +// } +// request.then(function (response) { +// this.success(response); +// }).catch(function (error) { +// this.catch(error); +// }).finally(function () { +// this.finally(); +// }); +//} +var token = localStorage.getItem('accessToken'); +var refreshToken = localStorage.getItem('refreshToken'); +axios.interceptors.request.use( + function (config) { + if (config.url.indexOf('.html') === -1 && config.url.indexOf('getToken') === -1) { + if (token) { + config.withCredentials = true; + config.headers['x-requested-with'] = 'XMLHttpRequest'; + config.headers['Authorization'] = 'Bearer ' + token; + console.log(config.headers['Authorization']); + } + } + return config; + }, + function (error) { + console.log('axios.interceptors.request.error:'); + console.log(error); + return Promise.reject(error); + } +); +axios.interceptors.response.use(function (response) { + console.log('axios.interceptors.response:'); + console.log(response); + return response; +}, function (error) { + console.log('axios.interceptors.response.error:'); + console.log(error.response); + if (error.response.status === 401) { + var url = '/UserCenter/api/v1/token/refreshToken'; + var data = refreshToken:refreshToken}; + axios.post(url, data) + .then(function (response) { + token = response.data.accessToken; + localStorage.setItem("accessToken", token); + refreshToken = response.data.refreshToken; + localStorage.setItem("refreshToken", refreshToken); + config.headers['Authorization'] = 'Bearer ' + token; + console.log('after refresh token,send request again'); + axios.request(error.config); + }) + .catch(function (error) { + if (error.response.status === 401) { + console.log('refreshToken invalid'); + router.push('/login') + } + }); + } + return Promise.reject(error); +}); /// -var token=localStorage.getItem('accessToken'); -var refreshToken= localStorage.getItem('refreshToken'); const routes = [ ]; var routeList = routes.concat(); diff --git a/projects/WebUI/wwwroot/pchome.js b/projects/WebUI/wwwroot/pchome.js index acbe61b1..4398fd0e 100644 --- a/projects/WebUI/wwwroot/pchome.js +++ b/projects/WebUI/wwwroot/pchome.js @@ -5,13 +5,19 @@ template: response.data, data() { return { - model:null + model: null }; }, mounted: function () { console.log('mounted:home'); weui.tab('#tab', { defaultIndex: 1 }); + var url = '/UserCenter/api/v1/Token/GetUserInfo'; + axios.get(url) + .then(function (response) { + }) + .catch(function (error) { + }) }, methods: { }