そのため、私は独自のカスタムメンバーシッププロバイダーを実装しました。現在、ValidateUser()のみを上書きしています。また、Signalrも機能しています。現在は、send messageを呼び出して、それをすべてのリスナーに送信する単純なメソッドです。このコマンドを単独で実行できないように、検証チェックを追加したいと思います。これまでのところ、Context.User.Identity.IsAuthenticatedを使用してこれを実行できることがわかりました。
[HubName("messageController")]
public class MessageController : Hub
{
public void SendMessage(string message)
{
if (Context.User.Identity.IsAuthenticated) // this line not working
{
Clients.addMessage(message);
}
else
{
Clients.addMessage("not authenticated");
}
}
}
私の問題は、現在カスタムメンバーシッププロバイダーの値を使用しているためです。代わりにここで使用する必要があるものは他にありますか?
現在、ログインすると次のように実行します。
[AllowAnonymous]
[HttpPost]
public ActionResult Login(LoginModel model, string returnUrl)
{
if(Membership.ValidateUser(model.UserName, model.Password))
{
// Need something here to actually set the logged in user
}
return RedirectToAction("Index", "");
}
ここで何が欠けていますか?セッションを処理するために独自のコードを保存する必要がありますか?FormsAuthentication.SetAuthCookie(model.UserName, true);
うまくいったものを使用してみましたが、間違いだと確信しています。ロールを変更して導入しようとすると、Context.User.IsInRole("Admin")
falseが返されました。以下のユーザーモデルを使用しましたが(デバッグ時にこのメソッドに到達することはありません):
public class User : IPrincipal
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
public long UserID;
public string Name;
public string ConnectionId;
public virtual IIdentity Identity
{
get;
set;
}
public virtual bool IsInRole(string role)
{
return true;
}
}
私はこれで何かが欠けているとかなり確信しています、何かアイデアはありますか?