Asp.net mvc 3 控制器内的信号认证?
我在玩SignalR,我似乎无法掌握身份验证来为公共和安全聊天构建演示应用程序。有一个聊天室,我想演示一下,经过身份验证的用户将收到公共消息和经过身份验证的用户消息。使用Asp.net mvc 3 控制器内的信号认证?,asp.net-mvc-3,authentication,signalr,Asp.net Mvc 3,Authentication,Signalr,我在玩SignalR,我似乎无法掌握身份验证来为公共和安全聊天构建演示应用程序。有一个聊天室,我想演示一下,经过身份验证的用户将收到公共消息和经过身份验证的用户消息。使用AccountController中的stock MVC(3)互联网应用程序进行身份验证 在控制器中获取集线器上下文是没有意义的,因为它没有连接id。如何获取连接id以将特定连接添加到组中进行“安全聊天”应该在控制器中完成?还是我在中心内缺少了一些方法 [HttpPost] public ActionResult LogOn(L
AccountController
中的stock MVC(3)互联网应用程序进行身份验证
在控制器中获取集线器上下文是没有意义的,因为它没有连接id。如何获取连接id以将特定连接添加到组中进行“安全聊天”应该在控制器中完成?还是我在中心内缺少了一些方法
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
var context = GlobalHost.ConnectionManager.GetHubContext<Chat>();
// add to signalr secure group
// but no connection id here
[HttpPost]
公共操作结果登录(LogOnModel模型,字符串返回URL)
{
if(ModelState.IsValid)
{
if(Membership.ValidateUser(model.UserName、model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName,model.RememberMe);
var context=GlobalHost.ConnectionManager.GetHubContext();
//添加到信号安全组
//但这里没有连接id
我完全忽略了显而易见的、有很好文档记录的内容。一旦用户通过正常身份验证,Hub
派生类将能够确认身份验证,例如
public class Chat : Hub
{
public void send(string message)
{
Clients.addMessage(message);
}
public void securesend(string message)
{
if (this.Context.User.Identity.IsAuthenticated)
{
// might not yet be a part of the "secured" group
Groups.Add(this.Context.ConnectionId, "secured");
Clients["secured"].addMessage("[SECURED] " + message);
}
}
}
请务必查看最新版本的SignalR,因为我们有很好的内置属性,您现在可以使用这些属性进行授权
当您像平常一样对用户进行身份验证时。您可以从中心访问用户身份。演示中心有一个连接方法,客户端调用该方法将连接ID映射到您的店铺身份。(我自己没有尝试过,但在查看聊天演示时,我就是这样理解的。)^我在任何地方都找不到这一点,很抱歉不清楚--这只是使用常规的.NET身份验证。signer还有一个Authorize属性,可以在其他情况下使用,但对于简单的场景并不需要。