在控制器方法中发出令牌后获取令牌和用户详细信息

时间:2018-03-12 06:49:14

标签: c# asp.net asp.net-identity

我在我的web api应用程序中使用Asp.net Identity进行基于令牌的身份验证。问题是我必须在生成令牌之后执行某些操作并且用户在之前以及在重定向到客户端之前进行身份验证。

我有一个使用/ token令牌认证的登录页面。一旦发出令牌,我需要在会话中保留用户和令牌值。 [此会话将用于显示在线用户。]

客户请求

 $('#btnLogin').click(function () {
            $.ajax({
                // Post username, password & the grant type to /token
                url: '/token',
                method: 'POST',
                contentType: 'application/json',
                data: {
                    username: $('#txtUsername').val(),
                    password: $('#txtPassword').val(),
                    grant_type: 'password'
                }
});

服务器端

[HttpPost]
    public void Login()
    {
     OnlineUsers user = new OnlineUsers();
     var users = (HttpContext.Current.Session["ActiveUsers"] as 
     List<OnlineUsers>) ?? new List<OnlineUsers>();
     users.Add(user);
     HttpContext.Current.Session["ActiveUsers"] = users;
    }

我需要在发出令牌并使用身份验证后调用此控制器方法。 这有什么解决方案吗?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

使用会话的Web API不是一个好方法,要在客户端保存用户信息,您可以使用浏览器的localstorage。一旦用户通过您的登录api控制器进行身份验证,您就可以将用户所需的信息作为json返回给客户端,然后您可以将其保存到浏览器中。 Web API默认是无状态的,所以我认为会话不适合它,客户端的额外负担。 在服务器上存储会话状态违反了REST体系结构的无状态约束。因此,会话状态必须完全由客户端处理。

Web API

[HttpPost]
public IHttpActionResultLogin()
{
     OnlineUsers user = new OnlineUsers();
     user=YourUserDetailsMethod();
     return Ok(user);
}

<强>客户端:

$('#btnLogin').click(function () {
        $.ajax({
            // Post username, password & the grant type to /token
            url: '/token',
            method: 'POST',
            contentType: 'application/json',
            data: {
                username: $('#txtUsername').val(),
                password: $('#txtPassword').val(),
                grant_type: 'password'
            },
            success: function(response){
                window.localStorage.setItem('userInfo', response);
                $('#UserName').val(window.localStorage.getItem('userInfo').UserName);
            }
});