Asp.net开发.NET.Netcore

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

2018-06-23  本文已影响5人  Weidaicheng

最近在做公司的公众号,由于需要可以同时使用微信和用户名密码登陆,所以建立了如下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;
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读