2016-05-09 2 views
3

В моем приложении я хочу отключить пользователя после периода бездействия. Пользователи регистрируются в своей учетной записи Google.ASP.NET MVC - Automatic Logoff

В файле Web.config я поставил <sessionState mode="InProc" timeout="10" /> под номером <system.web>, однако через 10 минут пользователь не вышел из системы.

Еще одна вещь, которую я бы хотел, чтобы автоматический журнал отключился, чтобы выполнить кусок кода, прежде чем завершить выход из системы. Этот код просто обновляет поле в таблице базы данных. Я не хочу использовать JavaScript, потому что я хочу, чтобы автоматический журнал отключился, если пользователь переходит от веб-сайта.

EDIT

Код внутри Startup.Auth.cs по просьбе @Igor

using System; 
using Microsoft.AspNet.Identity; 
using Microsoft.AspNet.Identity.Owin; 
using Microsoft.Owin; 
using Microsoft.Owin.Security.Cookies; 
using Microsoft.Owin.Security.Google; 
using Owin; 
using StudentLive.Models; 

namespace StudentLive 
{ 
    public partial class Startup 
    { 
     // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864 
     public void ConfigureAuth(IAppBuilder app) 
     { 
      // Configure the db context, user manager and signin manager to use a single instance per request 
      app.CreatePerOwinContext(ApplicationDbContext.Create); 
      app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 
      app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create); 

      // Enable the application to use a cookie to store information for the signed in user 
      // and to use a cookie to temporarily store information about a user logging in with a third party login provider 
      // Configure the sign in cookie 
      app.UseCookieAuthentication(new CookieAuthenticationOptions 
      { 
       AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
       LoginPath = new PathString("/Account/Login"), 
       Provider = new CookieAuthenticationProvider 
       { 
        // Enables the application to validate the security stamp when the user logs in. 
        // This is a security feature which is used when you change a password or add an external login to your account. 
        OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
         validateInterval: TimeSpan.FromMinutes(30), 
         regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
       } 
      });    
      app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 

      // Enables the application to temporarily store user information when they are verifying the second factor in the two-factor authentication process. 
      app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5)); 

      // Enables the application to remember the second login verification factor such as phone or email. 
      // Once you check this option, your second step of verification during the login process will be remembered on the device where you logged in from. 
      // This is similar to the RememberMe option when you log in. 
      app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie); 

      // Uncomment the following lines to enable logging in with third party login providers 
      //app.UseMicrosoftAccountAuthentication(
      // clientId: "", 
      // clientSecret: ""); 

      //app.UseTwitterAuthentication(
      // consumerKey: "", 
      // consumerSecret: ""); 

      //app.UseFacebookAuthentication(
      // appId: "", 
      // appSecret: ""); 

      app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions() 
      { 
       ClientId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX", 
       ClientSecret = "XXXXXXXXXXXXXXXXXXXX" 
      }); 
     } 
    } 
} 
+2

состояния сеанса не состояние аутентификации. Это две совершенно разные вещи. Сессия - это способ сохранения состояния сеанса, причем сеанс является взаимодействием с клиентом с сайтом. Аутентификация - это тот, кто известен клиенту. Поэтому модификации этого параметра в web.config не влияют на аутентифицированное состояние клиента. – Igor

+0

Если вам нужна дополнительная помощь, вам нужно будет указать, как вы аутентифицируете своих пользователей, я предполагаю, что вы используете существующую библиотеку или встроенный провайдер. Если нет, вам придется предоставить код, который вы до сих пор делаете. – Igor

+0

@Igor Пользователи аутентифицируются с использованием своих учетных записей Google. Visual Studio 2013 предоставляет код для обработки входных данных внешнего поставщика в файле 'Startup.Auth.cs', а' AccountController' уже имеет код, который обрабатывает внешний журнал. Мне не нужно было выполнять какие-либо реальные настройки с этим кроме предоставления моих «ClientId» и «ClientSecret». – RoyalSwish

ответ

5

Вы должны изменить экземпляр CookieAuthenticationOptions и предоставить дополнительные данные для вашего срока.

Из документации

  • SlidingExpiration - The SlidingExpiration устанавливается истине инструктировать промежуточное программное обеспечение переиздать новое печенье с новым временем истечением срока действия в любое время он обрабатывает запрос, который более чем наполовину через окно истечения срока действия.
  • ExpireTimeSpan - Контролирует, сколько времени cookie останется действительным с момента его создания. Информация об истечении срока действия находится в защищенном билете cookie. Из-за этого истекший cookie будет проигнорирован, даже если он передается серверу после того, как браузер должен был очистить его.

Код:

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    // add these lines 
    SlidingExpiration = true, 
    ExpireTimeSpan = TimeSpan.FromMinutes(10), 
    // rest of your code 
} 
+0

Правда, истекает ли это из-за внешнего файла cookie? Или это работает только с cookie-аутентификацией asp.net? –

+0

@ErikFunkenbusch - как я понимаю, это ваш файл cookie (принадлежащий этому домену), содержащий информацию о претензиях. Этот файл cookie затем повторно проверяется с каждым запросом на восстановление аутентифицированной личности, чтобы ваше приложение имело аутентификационный контекст.Вы должны иметь возможность установить действие срока действия в своем приложении, так как сам файл cookie содержит стандартную информацию об истечении срока действия (срок действия/время). – Igor

Смежные вопросы