美文网首页Asp.net开发.NET.Netcore
Jwt payload反序列化到实体对象bool值出错问题

Jwt payload反序列化到实体对象bool值出错问题

作者: Weidaicheng | 来源:发表于2018-06-23 09:25 被阅读5次

最近在做公司的公众号,由于需要可以同时使用微信和用户名密码登陆,所以建立了如下payload类:

public class Payload
{
    private string openId;
    private string username;
    private bool useOpenId;

    public bool UseOpenId
    {
        get
        {
            return useOpenId;
        }
    }

    public string OpenId
    {
        get
        {
            return openId;
        }
        set
        {
            openId = value;
            useOpenId = true;
        }
    }

    public string Username
    {
        get
        {
            return username;
        }
        set
        {
            username = value;
            useOpenId = false;
        }
    }
}

在使用openid的时候如下实例Payload对象:

var payload = new Payload()
{
    OpenId = "xxx";
}

之后得到token:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJVc2VPcGVuSWQiOnRydWUsIk9wZW5JZCI6Im9wZW5JZCIsIlVzZXJuYW1lIjpudWxsfQ.iSEDAX45Y_EVLIujEU9QZX3VMKF7uOU_hYlbk_rlXS0

解析发现payload没有问题

jwt.io.png
但是在使用 Jwt 类库反序列化为对象的时候 UseOpenId 永远为 false

经过研究代码发现,在反序列化的时候会对属性依次赋值,因为顺序问题/名称问题,Username 属性总会在 OpenId 属性后赋值,即使该值为 null,所以出现上述问题。

Payload类修改如下,问题得以解决:

public string OpenId
{
    get
    {
        return openId;
    }
    set
    {
        openId = value;
        if(!string.IsNullOrEmpty(value))
            useOpenId = true;
    }
}

    public string Username
    {
        get
        {
            return username;
        }
        set
        {
            username = value;
            if(!string.IsNullOrEmpty(value))
                useOpenId = false;
        }
    }

相关文章

  • Jwt payload反序列化到实体对象bool值出错问题

    最近在做公司的公众号,由于需要可以同时使用微信和用户名密码登陆,所以建立了如下payload类: 在使用openi...

  • jwt基于Spring及Redis的鉴权

    首先,介绍下jwt(json web token)。 jwt包括3个部分: Header (头部)、Payload...

  • JWT认证实务

    先行占坑。 JWT = header + payload + signature Claims:Registere...

  • jwt

    1.JWT 的原理 JWT 的数据结构 Header(头部)Payload(负载)Signature(签名) He...

  • 使用JWT做用户登陆token校验

    一、什么是JWT JWT全称JSON Web Token,由三部分组成: header(头)、payload(载体...

  • srs 如何同时支持大小端模式

    大小端的问题,只在序列化数字的时候,会出现问题,需要修改: payload lengthtimestampafm0...

  • 序列化和反序列化的概念

    1序列化:把对象转为字节序列的过程 为序列化; 2相反:字节---------->对象 为反序列化 3 序列化的场...

  • DDD

    实体与值对象的区别: 实体拥有标识,而值对象没有。 相等性测试方式不同。实体根据标识判等,而值对象根据内部所有属性...

  • elasticsearch之索引文档和取回文档

    文档: 多数实体或对象可以被序列化为包含键值对的 JSON 对象,文档是指最顶层或者根对象, 这个根对象被序列化成...

  • jwt的组成部分

    什么是JWT jwt是信息加密的一种方式,一个JWT由三个部分组成:header,payload,signatur...

网友评论

  • fuzhixin0:另一种写法:
    public bool UseOpenId
    {
    get
    {
    return !string.IsNullOrEmpty(this.OpenId);
    }
    }
    这样其它属性内可以不操作UseOpenId。
    Weidaicheng:是的 也可以这样写:smile:

本文标题:Jwt payload反序列化到实体对象bool值出错问题

本文链接:https://www.haomeiwen.com/subject/kflryftx.html