我正在使用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 - 这个课程不完整,我假设AuthenticationType
和IsAuthenticated
不会在这里生效,因为异常永远不会抛出。
[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,还有一些详细说明如何编写整个服务提供程序进行身份验证。
我想要的只是一个非常基本的登录程序 - 没有记住我的风格饼干,没什么特别的。只需输入用户名/密码,服务器就会记住您的会话。我哪里错了,我错过了什么?