zoukankan      html  css  js  c++  java
  • IdentityServer4添加用户的方法及遇到的坑

    一、添加用户

    public ReturnResult Add(JObject jo)
            {
                var returnResult = new ReturnResult();
                string userId = jo.GetValue("Id").ToString();
                string account = jo.GetValue("Account").ToString();
                string password = jo.GetValue("Password").ToString();
                string token = jo.GetValue("TokenKey").ToString();
                using (var serviceProvider = BaseLogic.GetServiceProvider())
                {
                    using (var scope = serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope())
                    {
                        var context = scope.ServiceProvider.GetService<ApplicationDbContext>();
                        var userMgr = scope.ServiceProvider.GetRequiredService<UserManager<ApplicationUser>>();
    
                        var userModel = userMgr.FindByNameAsync(account).Result;
                        if (userModel == null)
                        {
                            userModel = new ApplicationUser
                            {
                                Id = userId,
                                UserName = account
                            };
                            var result = userMgr.CreateAsync(userModel, password).Result;
                            if (!result.Succeeded)
                            {
                                throw new Exception(result.Errors.First().Description);
                            }
                            result = userMgr.AddClaimsAsync(userModel, new Claim[] { new Claim(JwtClaimTypes.Name, account), }).Result;
                            if (!result.Succeeded)
                            {
                                throw new Exception(result.Errors.First().Description);
                            }
                        }
                        else
                        {
                            userMgr.ResetPasswordAsync(userModel, token, password);
                        }
                    }
                }
                returnResult.Success = true;
                returnResult.Message = "操作成功";
                return returnResult;
            }

    二、删除用户

    public ReturnResult Delete(JObject jo)
            {
                var returnResult = new ReturnResult();
                string account = jo.GetValue("Account").ToString();
                using (var serviceProvider = BaseLogic.GetServiceProvider())
                {
                    using (var scope = serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope())
                    {
                        var context = scope.ServiceProvider.GetService<ApplicationDbContext>();
                        var userMgr = scope.ServiceProvider.GetRequiredService<UserManager<ApplicationUser>>();
    
                        var userModel = userMgr.FindByNameAsync(account).Result;
                        if (userModel != null)
                        {
                            var claim = userMgr.GetClaimsAsync(userModel);
                            if (claim.Result != null)
                            {
                                var deleteClaimsResult = userMgr.RemoveClaimsAsync(userModel, claim.Result);
                                if (!deleteClaimsResult.Result.Succeeded)
                                {
                                    returnResult.Success = false;
                                    returnResult.Message = string.Join(',', deleteClaimsResult.Result.Errors.ToList().Select(c => c.Description).ToList());
                                }
                            }
                            var deleteUserResult = userMgr.DeleteAsync(userModel);
                            if (!deleteUserResult.Result.Succeeded)
                            {
                                returnResult.Success = false;
                                returnResult.Message = string.Join(',', deleteUserResult.Result.Errors.ToList().Select(c => c.Description).ToList());
                            }
                        }
                    }
                }
                returnResult.Success = true;
                returnResult.Message = "操作成功";
                return returnResult;
            }

    三、遇到的坑坑坑坑(折腾了我一个多小时)

    result = userMgr.AddClaimsAsync(userModel, new Claim[] { new Claim(JwtClaimTypes.Name, account), }).Result;

    上面标红的:

    JwtClaimTypes

    虽然是引用的:IdentityModel,但不能在nuget直接添加这个引用,要添加IdentityServer4这个引用,添加了IdentityServer4就自动会有IdentityModel。

  • 相关阅读:
    python之生成器
    flask_sqlalchemy filter 和filter_by的区别
    Linux 更新python至2.7后ImportError: No module named _ssl
    Linux pip 安装模块时,一直黄字错误:Could not find a version that satisfies the requirement
    Linux 创建python虚拟环境
    python 需求文件requirements.txt的创建及使用
    wget http://pypi.python.org/packages/source/s/setuptools/setuptools-2.0.tar.gz 下载时报错 ssl is required 解决办法
    结合daterangepicker实现Datatables表格带参数查询
    datatable 的ajax修改参数,post可以传参处理
    datatables 参数详解(转)
  • 原文地址:https://www.cnblogs.com/wjx-blog/p/12313510.html
Copyright © 2011-2022 走看看