protected virtual void LimpaTokenAutoLogin(IRailsEngineContext ctx, IAppUser u)
        {
            Log.Info("Limpando cookie e token de auto-login para o usuário");

            DefineCookieAutoLogin(null, DateTime.Today.AddDays(-10));
            if (u != null)
            {
                u.AutoLoginHash = null;
                u.Save();
            }
        }
        /// <summary>
        /// Gera um token (uma string) que pode ser usada para login automático,
        /// e salva no registro do usuário especificado.
        /// </summary>
        /// <param name="u">O usuário para gerar ou obter o hash</param>
        /// <param name="novo">Se <c>true</c>, cria um novo hash, senão, retorna o hash já salvo</param>
        /// <param name="apenasHash">Se <c>true</c>, retorna apenas o hash, sem criar o token</param>
        protected virtual string ObtemTokenParaLoginAutomatico(IAppUser u, bool novo, bool apenasHash)
        {
            if (novo)
            {
                Log.InfoFormat("Gerado novo token de login automático para o usuário #{0} ({1})", u.Id, u.Login);
                u.AutoLoginHash = GeraHashParaLoginAutomatico();
                u.Save();
            }

            var hash = CriptografaSenha(u.AutoLoginHash + ":" + u.Login + ":" + u.Password);

            return(apenasHash ? (hash) : (u.Id + ":" + hash));
        }
		protected virtual void LimpaTokenAutoLogin(IRailsEngineContext ctx, IAppUser u)
		{
			Log.Info("Limpando cookie e token de auto-login para o usuário");

			DefineCookieAutoLogin(null, DateTime.Today.AddDays(-10));
			if (u != null)
			{
				u.AutoLoginHash = null;
				u.Save();
			}
		}
		/// <summary>
		/// Gera um token (uma string) que pode ser usada para login automático,
		/// e salva no registro do usuário especificado.
		/// </summary>
		/// <param name="u">O usuário para gerar ou obter o hash</param>
		/// <param name="novo">Se <c>true</c>, cria um novo hash, senão, retorna o hash já salvo</param>
		/// <param name="apenasHash">Se <c>true</c>, retorna apenas o hash, sem criar o token</param>
		protected virtual string ObtemTokenParaLoginAutomatico(IAppUser u, bool novo, bool apenasHash)
		{
			if (novo)
			{
				Log.InfoFormat("Gerado novo token de login automático para o usuário #{0} ({1})", u.Id, u.Login);
				u.AutoLoginHash = GeraHashParaLoginAutomatico();
				u.Save();
			}

			var hash = CriptografaSenha(u.AutoLoginHash + ":" + u.Login + ":" + u.Password);
			return (apenasHash ? (hash) : (u.Id + ":" + hash));
		}