わかりました、排水管を下った午後、私はSOの支援を認めます。私のログイン方法はかなり標準的です。以下に示すように、私は WebSecurity.Login を使用しています。
その直後に、ユーザーのプロファイルが完成しているかどうかを確認し、完成していない場合はそのビューに送信します。
コントローラ
[AllowAnonymous]
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && WebSecurity.Login(model.Email, model.Password, persistCookie: model.RememberMe))
{
if (!User.IsInRole("User"))
{
if (!IsProfileComplete(WebSecurity.GetUserId(User.Identity.Name)))
{
return RedirectToAction("ProfileCompletion");
}
if(!User.IsInRole("User")) Roles.AddUserToRole(User.Identity.Name, "Vendor");
}
else // user has role
{
return RedirectToAction("Index", "Dashboard");
}
}
ModelState.AddModelError("", "Unknown username or password.");
return View(model);
}
私はそれをたくさん踏み出しました....WebSecurity.Loginの後、WebSecurityユーザーデータが設定されるという印象を受けましたが、WebSecurity.GetUserId(User.Identity.Name)は-1として返されます
ユーザーがプロファイルを完了した場合でも、ユーザー ID -1 のプロファイルを検索しようとしているため、プロファイルの完了にリダイレクトされます。
http 投稿とログイン コンテキスト セットについて、何か不足しているものはありますか? 私が探している最終結果は、ユーザーがシステムに入る前にプロファイル ページを完了していることを確認することです。多分これを行うためのより良い方法がありますか?
編集 - - -
このリンクを見つけましたが、誰かが私の目的の機能のより良いパターンを提案できれば、簡単なコメントをいただければ幸いです
MVC 4 SimpleMembership - ログイン後に WebSecurity.CurrentUserId -1 になる理由