2016-05-07 26 views
14

私は、私のアプリの承認を制御するためにAsp.Net Identityを使用しています。これを行う必要があります:ユーザーが30分以内に操作しない場合は、ログインページにジャンプします。彼はログインは "isPersistent"チェックボックスを選択しません。 「isPersistent」チェックボックスをオンにした場合は、Cookieの有効期限を14日間設定します。 は私が変更することでこれを実行しようと、このようなStarup.Auth.cs:asp.netアイデンティティクッキーの期限切れ時間

public void ConfigureAuth(IAppBuilder app) 
{ 
    app.UseCookieAuthentication(new CookieAuthenticationOptions 
    { 
     AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
     LoginPath = new PathString("/Account/Login"), 
     SlidingExpiration = true, 
     CookieName = WebHelpers.ConstStrings.AUTHCOOKIESNAME 
    }); 
} 

と、このようなサインインのコード:

private async Task SignInAsync(User user, bool isPersistent) 
{ 
    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie); 
    var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie); 
    if (isPersistent) 
    { 
     AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity); 
    } 
    else 
    { 
     AuthenticationManager.SignIn(new AuthenticationProperties() { ExpiresUtc = new DateTimeOffset(DateTime.UtcNow.AddMinutes(30)) }, identity); 
    } 
} 

しかし、私は、ユーザーがisPersistentチェックボックスを選択しないときことがわかりましたクッキーの有効期限はすでに 'セッション'で、現在の時間には30分を加算したものではありません。 enter image description here

クッキーの状態の後のようなコードなので、 '私を覚えて' のチェックボックスができていない作品を使用しています。:(。

 app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
      LoginPath = new PathString("/Account/Login"), 
      ExpireTimeSpan = TimeSpan.FromMinutes(30), 
      SlidingExpiration = true, 
      CookieName = WebHelpers.ConstStrings.AUTHCOOKIESNAME 
     }); 

enter image description here

答えて

21

AuthenticationPropertiesIsPersistentプロパティがfalseに設定されている場合、クッキーの有効期限はsセッションへ

チェックボックス場合は、あなたが(14日にデフォルト)Startup.csで設定ExpireTimeSpanに等しい有効期限とクッキーを作成します。その後、AuthenticationManager.SignIn(new AuthenticationProperties{ IsPersistent = true }, userIdentity);をチェックしている「私が覚えています」。

チェックボックスは、あなたがAuthenticationManager.SignIn(new AuthenticationProperties{ IsPersistent = true, ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(30)}, userIdentity);を使用する必要がをチェックされていない「私は覚えている」場合。再びIsPersistentがtrueに設定されましたが、今度はExpiresUtcに値を与えて、CookieAuthenticationOptionsからStartup.csまでは使用しません。

public override async Task SignInAsync(ApplicationUser user, bool isPersistent, bool rememberBrowser) 
{ 
    var userIdentity = await CreateUserIdentityAsync(user).WithCurrentCulture(); 
    // Clear any partial cookies from external or two factor partial sign ins 
    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie, DefaultAuthenticationTypes.TwoFactorCookie); 
    if (rememberBrowser) 
    { 
     var rememberBrowserIdentity = AuthenticationManager.CreateTwoFactorRememberBrowserIdentity(ConvertIdToString(user.Id)); 
     AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistent }, userIdentity, rememberBrowserIdentity); 
    } 
    else 
    { 
     //AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistent }, userIdentity); 
     if (isPersistent) 
     { 
      AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = true }, userIdentity); 
     } 
     else 
     { 
      AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = true, ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(30) }, userIdentity); 
     }   
    } 
} 
+0

パーフェクト、私はあなたのコードを使用し、上記の機能を達成する、ありがとう。また、Owinを2.1.0から3.0.1にアップグレードしました。 –

+0

ありがとう、私に明確なものを作った – Janiiik

+0

ありがとう、あなたのコードと説明は完全に動作します。 –

4

使用この...

public void ConfigureAuth(IAppBuilder app) 
{ 
    app.UseCookieAuthentication(new CookieAuthenticationOptions 
    { 
     ExpireTimeSpan = TimeSpan.FromHours(1), 
    });    
} 
+0

おかげで、私は「私を覚えている」ことがわかった場合は動作しないことができます私はこのプロパティを設定します。 –

+0

これは私のためには機能しません。それでもデフォルトは14日です。 – Garth

+1

@GarthまずブラウザのCookieを手動で削除しようとします。 –

0

私は同じ問題を持っていたし、このコードは(Startup.csファイル内に)私のために働いた。..

services.Configure<IdentityOptions>(options => 
{ 
    options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(9999); 
}); 

これは、永続的に概ね27年(または決して期限が切れる)を追加しますクッキー。

NB:あなたは1分30秒などのためTimeSpan.FromSeconds(30);ためTimeSpan.FromMinutes(1);を使用することができます有効期限の少ないたかった...

関連する問題