首页 新闻 会员 周边

请问在.net core webapi中多层保存传递当前用户信息,有什么好的处理方式?

0
悬赏园豆:20 [已解决问题] 解决于 2021-02-07 16:33

举例:请求时,会在请求header中携带用户身份信息,在请求后续处理中,会经常用到用户身份信息,在多层中怎么样避免一层一层传递

最美的不是下雨天的主页 最美的不是下雨天 | 初学一级 | 园豆:4
提问于:2021-01-24 20:52
< >
分享
最佳答案
0

我是用JWT /// <summary>
/// 重写过滤器
/// </summary>
/// <param name="context"></param>
public void OnActionExecuting(ActionExecutingContext context)
{
ReturnModel ret = new ReturnModel();
if (context.HttpContext.Request.Headers.ContainsKey("access_token"))
{
//获取token
// object tokenobj = context.ActionArguments["token"];//请求参数获取,用地址栏的参数 还需要加验证
object tokenobj = context.HttpContext.Request.Headers["access_token"].ToString();//请求头里面获取
string token = tokenobj.ToString();

            string loginID = "";
            //验证jwt,同时取出来jwt里边的用户ID
            TokenType tokenType = tokenHelper.ValiTokenState(token, a => a["iss"] == "QmWyy" && a["aud"] == "HospEveryCus", action => { loginID = action["Id"]; });
            if (tokenType == TokenType.Fail)
            {
                ret.Code = 202;
                ret.Msg = "access_token验证失败";
                context.Result = new JsonResult(ret);
                return;
            }
            if (tokenType == TokenType.Expired)
            {
                ret.Code = 205;
                ret.Msg = "access_token已经过期";
                context.Result = new JsonResult(ret);
            }
            if (!string.IsNullOrEmpty(loginID))
            {
                //给控制器传递参数(需要什么参数其实可以做成可以配置的,在过滤器里边加字段即可)
                 context.ActionArguments.Add("patientId", loginID);//存储当前客户的ID
            }
        }
        else
        {

            ret.Code = 401;
            ret.Msg = "没有令牌,禁止访问";
            context.Result = new JsonResult(ret);
            return;
        }
    }
收获园豆:10
魏杨杨 | 菜鸟二级 |园豆:373 | 2021-01-25 10:58
其他回答(2)
0

你可以封装到一个公共类里面,当请求过来,就包装一下,然后每个接口都能获取到用户的信息,
你把用户信息放到header里面不太安全,最好是在header里面存一个用户标识,然后在后台查询用户信息,在包装成用户类

收获园豆:5
不知道风往哪儿吹 | 园豆:2035 (老鸟四级) | 2021-01-25 09:14
0

可以从Header接收,存储再静态变量中

 var originValue = headers["user"].ToString();
                if (string.IsNullOrWhiteSpace(originValue)) return null;

                var decodeValue = HttpUtility.UrlDecode(originValue);

                var user = SerializerHelper.JsonDeserialize<BaseUser>(decodeValue);

更多知识点《.NET Core 跨平台实战》

收获园豆:5
智客工坊 | 园豆:1855 (小虾三级) | 2021-01-25 14:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册