ログインはかなり標準のアイデンティティコードです。私は私が必要なものを行うにはいくつかのことを追加しましたが、大部分はログインコードは、未編集のまま:ASP.NETユーザーの役割が確立される前にログイン後にIDがリダイレクトされる
var result = signinManager.PasswordSignIn(User.UserName, Password.Text, RememberMe.Checked, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
// Store the user's supplier Id (if it exists - i.e. user is not an admin).
using (ApplicationDbContext Context = new ApplicationDbContext())
{
Session["UserId"] = User.Id;
}
IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
break;
}
、私は彼の役割に応じて、ここまたはそこにユーザーを取るためにIdentityHelper
にリダイレクトを修正:
public static void RedirectToReturnUrl(string returnUrl, HttpResponse response)
{
if (!String.IsNullOrEmpty(returnUrl) && IsLocalUrl(returnUrl))
{
response.Redirect(returnUrl);
}
else
{
if (HttpContext.Current.User.IsInRole("Supplier"))
response.Redirect("~/Members/Supplier.aspx");
if (HttpContext.Current.User.IsInRole("Admin"))
response.Redirect("~/Members/Admin.aspx");
if (HttpContext.Current.User.IsInRole("Consultant"))
response.Redirect("~/Members/Consultant.aspx");
}
}
問題は、新しいユーザーで初めてログインしたとき(つまり、管理者としてログアウトし、ログアウトしてサプライヤとしてログインしようとしたとき)、HttpContext.Current.User.IsInRole("Supplier")
がfalseを返すため、ログインはリダイレクトされません。
私はすぐにシステムがあまりにも早くリダイレクトを試みているとログインが実際に適切にユーザー情報をコンパイルしていないように私には思えるので、それは完全に正常に動作し、同じログイン資格情報を使用して再度お試しください。
このような場合、どのようなユーザーが適切に割り当てられた後、それが唯一のリダイレクトを試みるようにそれを遅くするための最良の方法だろうか?
シンプルdo...while
ループが十分に働くかもしれないように私は感じる:
do
{
// Literally do nothing while the condition is true.
}
while (!HttpContext.Current.User.IsAuthenticated);
はクッキーで