在ASP.NET vNext中,Context.User始终为null,并具有基本身份验证

时间:2015-09-12 20:28:41

标签: asp.net asp.net-core

我正在使用vNext beta8为我的网站编写一个简单的登录页面+ SignalR聊天室。不幸的是,我很难理解声明和身份验证的工作方式。

我要做的就是验证用户身份并将Context.User设置为他们的身份,因此可以在SignalR中访问它。但是,就我现在的方式而言,Context.User到处都是空的,所以SignalR甚至不是这个问题的主要内容。

以下是此问题的相关代码位:

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddSession();
    services.AddCaching();
    services.AddSignalR();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseStaticFiles();
    app.UseSession();
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller}/{action}/{id?}",
            defaults: new { controller = "Home", action = "Index" });
    });
    app.UseSignalR();
}

登录Web API控制器方法,提供默认值,跳过密码/身份验证检查,以及设置可运行的会话。 LoginUserInfo只是一个小类,可以接收用于登录的用户名/密码。

[HttpPost]
public string Login(LoginUserInfo info)
{
    kUser user = new kUser();
    user.Name = "Test user";

    //This is where I am completely missing the point of something
    Context.User = new ClaimsPrincipal(user);
}

kUser - 这个课程不完整,我假设AuthenticationTypeIsAuthenticated不会在这里生效,因为异常永远不会抛出。

[Serializable]
public class kUser : IIdentity
{
    public ObjectId Id { get; set; }
    public string Name { get; set; }

    public string AuthenticationType
    {
        get { return "MongoDB"; }
    }

    public bool IsAuthenticated
    {
        get
        {
            //If ID exists in database
            throw new NotImplementedException();
        }
    }
}

研究引导我通过许多不同的方式来完成设置Context.User并使其在整个应用程序中可用。有些指南指向FormsAuthentication,它似乎不存在于ASP.NET 5中,有些指向为每个线程设置用户ID,还有一些详细说明如何编写整个服务提供程序进行身份验证。

我想要的只是一个非常基本的登录程序 - 没有记住我的风格饼干,没什么特别的。只需输入用户名/密码,服务器就会记住您的会话。我哪里错了,我错过了什么?

0 个答案:

没有答案