首页 > 其他 > 详细

25.ProfileService实现(调试)

时间:2019-06-05 14:05:21      阅读:157      评论:0      收藏:0      [点我收藏+]

上一节课拿到的AccessToken和IdToken
技术分享图片

实现ProfileService类

在服务端 添加ProfileService类
技术分享图片
需要继承IProfileServiuce
技术分享图片

用到的画图工具

技术分享图片

IprofileService接口里面有两个方法, 我们去实现这两个方法
这里是否激活,我们先设置为false
技术分享图片

IsActive当我们拿到Subject的时候再去设置为true,也就是我们这里拿到的sub的值为4的这个。
技术分享图片

对应我们数据里的这个用户id。AspNetUsers这个表的主键。用户的id是4
技术分享图片

获取到subjectId
技术分享图片
然后根据SubjectId拿到用户的信息。注入UserManager。命名空间在AspNetCore.Identity命名空间下
技术分享图片

通过SubjectId获取到用户的信息,SubjecId其实就是User表的用户Id

技术分享图片
精简为一行代码。当用户对象不为空就返回true,那么IsActive就是True
技术分享图片
加上await 和 async
技术分享图片
我们之前没有启用用户的锁定,如果用户输入错 次数太多。LockoutEnabled就会锁定
技术分享图片


需要对IssuedClaim进行赋值。这些Claims就是从用户里来的
技术分享图片

Claim在System.Security.Claims这个命名空间下
技术分享图片
我们需要通过GetClaimFormUser这个方法来返回IssuedClaims
技术分享图片

JwtClaimTypes返回的都是常量,说白了就是固定的字符串
技术分享图片
userName也就是数据库内的Administrator
技术分享图片
通过user获取到Roles的列表然后 添加到Claims里面
技术分享图片

还需要加上一个头像的属性。在ApplicationUser里面加上了Avatar头像的这么一个属性值
技术分享图片
加上Avatar的Claim
技术分享图片
把这个方法名字加上Async重命名一下
技术分享图片
这样最终返回了IssuedClaims
技术分享图片

注入ProfileService类

在StartUp里面

技术分享图片

 

数据迁移

因为我们修改了ApplicationUser,所以需要对数据库做更新。因为这里我们增加了Avatar头像的属性,需要对数据库做迁移
技术分享图片
技术分享图片
技术分享图片
更新数据库
技术分享图片
这样我们头像的字段就加上来了
技术分享图片

把AspNetUsers表内的数据删除掉

技术分享图片

Seed初始化数据

删掉数据之后,执行我们的seed方法
技术分享图片

技术分享图片
头像地址是从网上随便找的图片的地址
技术分享图片
然后把默认的用户添加到administrator的角色里面
技术分享图片
运行 role添加失败了
技术分享图片

技术分享图片

技术分享图片
也有个succeed,如果失败了就抛出一个异常
技术分享图片

再次运行,又报了个错误
技术分享图片

随即的一个值,用来设置密码的,这里我们先随便设置成admin
技术分享图片
运行程序  依然报错
技术分享图片

主键可能需要改一下,因为它没有办法自动生成
技术分享图片


ApplicationUserRole也是同样的
技术分享图片
再去做数据迁移
技术分享图片
生成的内容比较多,但是有用的就是你这一句
技术分享图片
角色也加了一些东西
技术分享图片

然后更新数据库
技术分享图片
依然失败
技术分享图片

因为用户还没有创建成功就去给用户设置角色了造成了这个错误
技术分享图片
还是有错-_-!
技术分享图片


调试,返回了密码规则错误的问题
技术分享图片

小写、特殊符号、大写、长度这些密码的规则我们设置为false
技术分享图片
用户创建成功 返回了succeed
技术分享图片
user表有数据了
技术分享图片

头像字段也有值了
技术分享图片
RoleId给了个1
技术分享图片

角色表
技术分享图片

 

测试

 

把cookie都清除掉
技术分享图片

启动客户端。这样就可以使用123456 简单的密码来登陆

技术分享图片

点同意。登陆成功之后跳转回去
技术分享图片

技术分享图片

再次清除缓存,登陆
 技术分享图片

客户端
技术分享图片


这里调试用VScode调试
技术分享图片

技术分享图片
可以看到只有三个Claims
技术分享图片

服务端需要设置这里。这里做映射,从prolfileServie拿到Claim做一个绑定,绑定过之后才可以从从ProfileService返回里面去拿到
技术分享图片



技术分享图片
这个端口可以通过Access_token拿到
技术分享图片

再次运行测试
技术分享图片
role和avatar都拿到了
技术分享图片

客户端的设置。openIdConnect这里自己要做一个映射
技术分享图片


如果不这么做也可以通过Access_Token
技术分享图片

这里是发起了另外一个请求到我们5000的端口
技术分享图片

其实就相当于,发送了一次请求,把获取的token又访问了一次这个地址拿到UserInfo的这几个信息
技术分享图片
我们还可以把idToken复制到jwt.io解密出来
技术分享图片
他没有包含头像的信息,这是因为它是另外发起一个请求到endPoint去哪头像这些信息
所以客户端的这里,GetCliamsFormUserInfoEndpoint设置为了True
技术分享图片
这里注意,设置的也就是页面上拿到的IdToken
技术分享图片

服务端设置,这里为true,那么这些信息都被加密在idtoken里面
技术分享图片
客户端这里就不用设置了。
技术分享图片
客户端这里也可以去掉了
技术分享图片

一种是通过发起另外的请求去获取用户的信息,另外一种是在访问idToken直接就带过来了
客户端和服务端再重启
客户端的cookie再次清除
技术分享图片
技术分享图片
这样用户的信息直接在idToken里面都返回了
技术分享图片
解密下idToken

技术分享图片
 

25.ProfileService实现(调试)

原文:https://www.cnblogs.com/wangjunwei/p/10979060.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!