Jwt凭据生成和解析,vue组件路由传值

TangShanKaiPing
wanggang 6 years ago
parent 010fc88e05
commit d824c7d0ad

@ -21,7 +21,7 @@
<f7-view id="main-view" main class="safe-areas">
<f7-page name="page-index" @page:beforein="init">
<f7-navbar>
<f7-nav-title>title</f7-nav-title>
<f7-nav-title>{{Title}}</f7-nav-title>
</f7-navbar>
<f7-toolbar tabbar labels bottom>
<f7-link tab-link="#tab-1" icon-ios="f7:chat" icon-md="f7:chat" text="消息"></f7-link>
@ -30,8 +30,8 @@
</f7-toolbar>
<f7-tabs>
<f7-tab id="tab-1" class="page-content">
<f7-block>
<!--<template v-if="message&&message.Data.length">
<template v-for="message in Messages">
<template v-if="message&&message.Data.length">
<div class="block-title">{{message.DisplayName||message.Name}}</div>
<div class="list">
<ul v-if="message.Data.length">
@ -60,24 +60,14 @@
</template>
</ul>
</div>
</template>-->
</f7-block>
</template>
</template>
</f7-tab>
<f7-tab id="tab-2" class="page-content" tab-active>
<f7-block>
<div class="list links-list">
<ul id="nodeList">
<li v-for="node in Nodes">
<a class="item-content popup-open node" href="#" data-popup=".node-popup" :data-node-number="node.Number">
<div class="item-media"><i class="f7-icons">link</i></div>
<div class="item-inner">
<div class="item-title">{{node.Name}}</div>
<div class="item-after"><span class="badge color-blue">{{node.Count}}</span></div>
</div>
</a>
</li>
</ul>
</div>
<f7-list>
<f7-list-item v-for="node in Nodes" :title="node.Name" :badge="node.Count" :link="'/node/'+node.Number+'/name/'+node.Name"></f7-list-item>
</f7-list>
</f7-block>
</f7-tab>
<f7-tab id="tab-3" class="page-content">
@ -155,6 +145,13 @@
</form>
</f7-page>
</template>
<template id="page-node">
<f7-page>
<f7-navbar>
<f7-navbar :title="Name" back-link="Back"></f7-navbar>
</f7-navbar>
</f7-page>
</template>
<script src="lib/mobile.detect/mobile-detect.min.js"></script>
<script src="lib/lodash/lodash.min.js"></script>
<script src="lib/jquery/jquery.min.js"></script>

@ -7,6 +7,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="JWT" Version="5.0.1" />
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="MiniProfiler.AspNetCore.Mvc" Version="4.0.165" />
<PackageReference Include="MiniProfiler.EntityFrameworkCore" Version="4.0.165" />

@ -0,0 +1,11 @@
using System.Collections.Generic;
namespace Infrastructure.Jwt
{
public interface IJwtHelper
{
string GetToken(IDictionary<string, object> payload);
IDictionary<string, object> GetPayload(string token);
}
}

@ -0,0 +1,43 @@
using JWT.Algorithms;
using JWT.Builder;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
namespace Infrastructure.Jwt
{
public class JwtHelper : IJwtHelper
{
private readonly IConfiguration _cfg;
public JwtHelper(IConfiguration cfg)
{
this._cfg = cfg;
}
public IDictionary<string, object> GetPayload(string token)
{
var secret = this._cfg["jwt:key"];
var payload = new JwtBuilder()
.WithSecret(secret)
.MustVerifySignature()
.Decode<IDictionary<string, object>>(token);
return payload;
}
public string GetToken(IDictionary<string, object> payload)
{
var secret = this._cfg["jwt:key"];
var builder = new JwtBuilder()
.WithAlgorithm(new HMACSHA256Algorithm())
.WithSecret(secret)
.AddClaim("exp", DateTimeOffset.UtcNow.AddYears(100).ToUnixTimeSeconds());
foreach (var item in payload)
{
builder.AddClaim(item.Key, item.Value);
}
var token = builder.Build();
return token;
}
}
}

@ -1,4 +1,5 @@
using Infrastructure.Data;
using Infrastructure.Jwt;
using Infrastructure.Office;
using Infrastructure.Security;
using Infrastructure.UI;
@ -133,6 +134,7 @@ namespace Infrastructure.Web
services.AddSingleton<ITicketStore, DistributedCacheTicketStore>();
services.AddTransient(typeof(IRepository<>), typeof(EfRepository<>));
services.AddTransient<IEncryptionService, EncryptionService>();
services.AddTransient<IJwtHelper, JwtHelper>();
services.AddTransient<IExcelReader, ExcelReader>();
}

@ -2,6 +2,7 @@ using System;
using System.Linq;
using Application.Domain.Entities;
using Infrastructure.Data;
using Infrastructure.Jwt;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
@ -11,11 +12,13 @@ namespace IoTCenter.Controllers
{
public class HomeController : Controller
{
private readonly IJwtHelper _jwtHelper;
private readonly IRepository<Node> _nodeRepo;
private readonly IRepository<Device> _deviceRepo;
public HomeController(IRepository<Node> nodeRepo, IRepository<Device> deviceRepo)
public HomeController(IJwtHelper jwtHelper, IRepository<Node> nodeRepo, IRepository<Device> deviceRepo)
{
this._jwtHelper = jwtHelper;
this._nodeRepo = nodeRepo;
this._deviceRepo = deviceRepo;
}
@ -26,8 +29,9 @@ namespace IoTCenter.Controllers
return View();
}
public IActionResult GetNodes()
public IActionResult GetNodes(string token)
{
var userName = this._jwtHelper.GetPayload(token)["UserName"].ToString();
var model = this._nodeRepo.ReadOnlyTable()
.Select(o => new { o.Number, o.Name, o.DisplayOrder, Count = o.Devices.Count })
.ToList();

@ -20,6 +20,7 @@ namespace IoTCenter
new EFConfigurationValue { Id = "server.urls", Value= "http://*:8001" },
new EFConfigurationValue { Id = "security:key", Value= "111111111111111111111111"},
new EFConfigurationValue { Id = "security:iv", Value= "11111111"},
new EFConfigurationValue { Id = "jwt:key", Value= "111111111111111111111111"},
new EFConfigurationValue { Id = "usercenter:key", Value= "123456"},
new EFConfigurationValue { Id = "usercenter:login", Value= $"http://{host}:8000/Account/Login"},
new EFConfigurationValue { Id = "usercenter:logout", Value= $"http://{host}:8000/Account/Logout"},

@ -3,11 +3,14 @@ using Application.Models;
using Infrastructure.Data;
using Infrastructure.Email;
using Infrastructure.Extensions;
using Infrastructure.Jwt;
using Infrastructure.Resources;
using Infrastructure.Security;
using Infrastructure.Sms;
using Infrastructure.Web;
using Infrastructure.Web.DataAnnotations;
using JWT.Algorithms;
using JWT.Builder;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
@ -29,6 +32,7 @@ namespace UserCenter.Controllers
public class AccountController : BaseController
{
private readonly IConfiguration _cfg;
private readonly IJwtHelper _jwtHelper;
private readonly IRepository<User> _userRepo;
private readonly IRepository<Site> _siteRepo;
private readonly IStringLocalizer<Resource> _localizer;
@ -37,6 +41,7 @@ namespace UserCenter.Controllers
private readonly ISmsSender _smsSender;
public AccountController(IConfiguration cfg,
IJwtHelper jwtHelper,
IRepository<User> userRepo,
IRepository<Site> siteRepo,
IEncryptionService encryptionService,
@ -45,6 +50,7 @@ namespace UserCenter.Controllers
ISmsSender smsSender)
{
this._cfg = cfg;
this._jwtHelper = jwtHelper;
this._userRepo = userRepo;
this._siteRepo = siteRepo;
this._encryptionService = encryptionService;
@ -176,7 +182,19 @@ namespace UserCenter.Controllers
if (success)
{
var list = this._siteRepo.ReadOnlyTable().ToList();
if (!isAppLogin)
if (isAppLogin)
{
return Json(new
{
Code = 0,
Token = this._jwtHelper.GetToken(new Dictionary<string, object>() { { nameof(user.UserName), user.UserName } }),
user.NickName,
Title = this._cfg["name"],
IoTServer = list.FirstOrDefault(o => o.Name == "物联网平台").Home
}
);
}
else
{
var userPermissions = this._userRepo.ReadOnlyTable().Where(o => o.UserName == userName)
.SelectMany(o => o.UserRoles)
@ -206,10 +224,6 @@ namespace UserCenter.Controllers
Response.Headers.Remove("Location");
return View("JsonpLogin", urls);
}
else
{
return Json(new { Code = 0, NickName = user.NickName, IoTServer = list.FirstOrDefault(o => o.Name == "物联网平台").Home });
}
}
else
{
@ -232,15 +246,15 @@ namespace UserCenter.Controllers
message = ex.Message;
}
}
if (!isAppLogin)
if (isAppLogin)
{
ModelState.AddModelError(key, message);
ViewData["ReturnUrl"] = returnUrl;
return View(model);
return Json(new { Code = 1, Key = key, Message = message });
}
else
{
return Json(new { Code = 1, Key = key, Message = message });
ModelState.AddModelError(key, message);
ViewData["ReturnUrl"] = returnUrl;
return View(model);
}
}

Loading…
Cancel
Save