Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 控制器内的信号认证?_Asp.net Mvc 3_Authentication_Signalr - Fatal编程技术网

Asp.net mvc 3 控制器内的信号认证?

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

我在玩SignalR,我似乎无法掌握身份验证来为公共和安全聊天构建演示应用程序。有一个聊天室,我想演示一下,经过身份验证的用户将收到公共消息和经过身份验证的用户消息。使用
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属性,可以在其他情况下使用,但对于简单的场景并不需要。