2016-06-15 25 views
3

MVC5 WebアプリケーションをLinux MonoDevelopに移植しようとしています。Mono MVC5 User.Identity.IsAuthenticatedは、FormsAuthentication.SetAuthCookie()でログインした後にfalseを返します。

サイトではFormsAuthenicationを使用しているため、ログイン操作ではSetAuthCookie()を呼び出し、自分のコントローラではAuthorizeAttributeを使用して、ログインしたユーザーだけが機能にアクセスできるようにします。

これはWindows上でうまく動作します。

Monoに移植してMonoDevelopでデバッグした後、動作していないことがわかります。実際には、ログインに成功した後、ユーザーはログインページに再度リダイレクトされます。

HomeControllerの[Authorize]属性を削除してみましたが、何が起こっているかを確認するために、HomeControllerアクションでUser.Identity.IsAuthenticatedがfalseを返すことを認識しました。私はそれがログインへのリダイレクトを得る理由だと思います。

しかし、なぜUser.Identity.IsAuthenticatedがfalseを返すのでしょうか?

WindowsのSetAuthCookie()がhttpコンテキストに.ASPXAUTHクッキーを作成することを確認しました。 Linuxでは、httpコンテキストに.MONOAUTHクッキーを作成します。私はモノラルで、SetAuthCookie()はsuccesfuly実行される、ことを実現...

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Login" name=".ASPXAUTH" /> 
</authentication> 

しかし、これは動作しませんでした

UPDATE を: は私がでweb.configファイル内のクッキー名を設定しようとしましたしかし、クッキーはそこにありません(Firefoxのクッキー管理を使用して)。それでも、デバッグ時にResponse.Cookiesコレクションには.ASPXAUTHクッキーが組み込まれています。それはクライアント上で生成することができないようです。

答えて

2

FormsAuthentication.SignOut()が呼び出されたコードの任意の場所を確認します。

私はモノに同様の問題がありました。これは、Cookieのライフサイクルが異なるためにFormsAuthentication.SignOut()への不要な呼び出しが発生し、実際に作成される前に.ASPXAUTHクッキーが破棄されたためです。

+0

信じられないほど!ありがとう、それはまさに私の場合もそうでした。 .ASPXAUTHクッキーとともに初期化された他のクッキー-Bがありました。 B-クッキーは、HttpRequestに即座に追加されなかったので、Bの存在を正確にチェックして、FormsAuthentication.SignOut()を呼び出して自分の.ASPXAUTHクッキーを殺す機能を引き起こしました。 – cnom

関連する問題