[英]So the user has logged in, how do I implement a redirect to home page? (ASP MVC 3)
我對如何實現此功能感到很困惑。 最初,當用戶訪問網站時,他們會看到登錄頁面。
[HttpGet]
public ActionResult SignIn()
{
return View() ;
}
用戶輸入詳細信息時,它將調用:
[HttpPost]
public ActionResult Sign(SignInModel signInModel)
{
if(service.ValidateUser(signInModel.userName,signInModel.passWord))
{
FormsAuthentication.SetAuthCookie(signInModel.userName, true);return
return RedirectToAction("Index", "Home");
}
}
但是,作為測試,我決定返回登錄頁面,即localhost / Account / SignIn ,但它沒有將我重定向回首頁。
[HttpGet]
public ActionResult SignIn()
{
if(HttpContext.User.Identity.IsAuthenticated)
{
return RedirectToAction("Index", "Home");
}
return View() ;
}
但是我不知道它是如何工作的,所以我決定調試它。 但是事實證明它使用了錯誤的Identity
。
為了說明,我使用默認的MVC模板來使項目正常工作,我在James上登錄了該模板。 但是,在我自己的項目中,我以Peter登錄。
但是我自己的項目中的HttpContext.User.Identity
指的是默認網站的James, 而不是 Peter。。所以那里顯然有問題,但是什么呢?
TL; DR如何保存諸如StackOverflow之類的信息? 用戶僅應在會話期滿或退出時看到登錄頁面。
如果我對它的理解不正確,請糾正我。
localhost
和應用程序路徑\\
。 這與兩個網站都匹配。 您可以采取什么措施解決此問題?
注銷兩個網站。 不要登錄到虛擬網站。 登錄到實際網站。 玩得開心。
更永久的解決方案?
要看。 發生此問題的原因是cookie的范圍過於寬松。 如果必須在localhost
上運行兩個網站,則可以將IDE配置為在文件夾下啟動它們。 意味着虛擬網站在http://localhost:1234/dummy/
上啟動,而實際網站在http://localhost:4321/actual
。 對於普通的Cookie,您可以直接設置路徑。 對於身份驗證cookie,可以使用FormsAuthentication.GetAuthCookie
方法。
src: http : //telligent.com/support/telligent_evolution_platform/w/documentation/common-things-to-check-when-using-forms-authentication.aspx
HttpCookie cookie = FormsAuthentication.GetAuthCookie(username, true);
cookie.Path = "/dummy";
Response.Cookies.Add(cookie);
編輯:
似乎普遍的共識是不要設定道路。 https://stackoverflow.com/a/6940281/30007
Cookie路徑區分大小寫,因此:
http://site/path http://site/PATH
瀏覽器有2種不同的cookie-它們(IE,FX,Safari,Opera或Chrome)都不會將/ PATH的cookie發送到/ path,反之亦然。
我認為您正在尋找的答案在那里: 如何將/ Home重定向到root?
編輯:
在這種情況下,請嘗試以下操作:生成LogOn鏈接時,您可能需要傳遞returnUrl
參數:
@Html.ActionLink("Log On", "LogOn", "Account", new { returnUrl = Request.Url }, null)
在您的特定情況下,您可以將returnUrl
傳遞為主頁。 抱歉造成混亂。
希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.