簡體   English   中英

因此,用戶已登錄,如何實現重定向到主頁? (ASP MVC 3)

[英]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。
  • 您沒有退出虛擬網站。 因此,您的身份驗證Cookie仍然有效。
  • 然后,您啟動了實際的網站(您的項目)。 當您請求登錄頁面時,先前收到的cookie也將發送到服務器。 發生這種情況的原因是cookie的范圍是域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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM