Создание пользователя войти в систему персистентный с ASP.Net Membership

Я решил зарегистрировать представление в ServiceProvider моего пакета.
Указывает, что этот пакет предоставляет некоторые представления в каталоге / resources / views, и к этим представлениям можно обратиться, используя имя поставщика пакета php-responsive-quote.

public function boot(){
     ...
     $this->loadViewsFrom(__DIR__ . '/../resources/views', 'php-responsive-quote');
     ...
}

И затем в представлении, вызывая директивы @extends и @include таким образом.

@extends('laravel-responsive-gallery::layout')

@include('laravel-responsive-gallery::partials.input', [
                          'title' => 'Image file name',
                          'name' => 'file_name',
                          'placeholder' => '', 
])
18
задан Tom Halladay 25 June 2013 в 21:47
поделиться

3 ответа

Наконец-то я разгадал последний кусок головоломки. Когда пул приложений моего сервера перерабатывался (настраивался хостинг-провайдером), ключ шифрования состояния просмотра автоматически перегенерировался. Это означало, что даже несмотря на то, что куки были действительными и не просроченными (предварительное посещение), когда пользователь вернул шифрование, было изменено, и куки больше не действовали.

Решением было вручную указать статический ключ проверки. Следующая ссылка может использоваться для создания необходимого тега web.config для этого.

http://www.aspnetresources.com/tools/keycreator.aspx

ОБНОВЛЕНИЕ:

Вот более настраиваемый сайт для создания Машинный ключ

Исходное дерево - атрибут генерации

Я понимаю, что это может иметь незначительное влияние на безопасность, теоретически полагаю ' Безопаснее иметь изменяемый ключ на случай, если ваш ключ будет подвергнут грубому принуждению и поставит под угрозу любые данные, которые вы можете хранить в состоянии просмотра, но вам, вероятно, не следует хранить конфиденциальную информацию в состоянии просмотра, поскольку это в любом случае небезопасно по своей сути.

Пример:

<configuration>
  <system.web>
    <machineKey
        validationKey="97CEB2D3DEBF853649EAB851F56F08BA328423F935C97244CF5300925B6FF7D2C43084C73CBAF19D5193755EF7F87A3FFC714675F9197C822BAEEC97E853B91E"
        decryptionKey="A72F69A4650348E3AA249A8179516D67C8553B3D4BD165B9"
        validation="SHA1" />
  </system.web>
</configuration>
21
ответ дан 30 November 2019 в 06:59
поделиться

Я думаю, что Вы были бы богатым использованием FormsAuthentication.SetAuthCookie метод вместо того, чтобы написать много кода самостоятельно.

Я полагаю, что Ваши настройки поставщика членства в web.config могут конфликтовать с настройками, которые Вы обеспечиваете в коде, плюс Вы не обеспечиваете имя cookie.

Попробуйте следующее:

if (Membership.ValidateUser(userName, password))
{
    FormsAuthentication.SetAuthCookie(userName, true); //Creates a cookie named "XXXAuth" - see settings in web.config below
}

В сочетании со следующими настройками в web.config:

<authentication mode="Forms">
    <forms cookieless="UseCookies" loginUrl="~/SignIn.aspx" name="XXXAuth" slidingExpiration="true" timeout="432000"/>
</authentication>


<membership defaultProvider="XXXMembershipProvider">
    <providers>
        <clear />
        <add name="XXXMembershipProvider" type="System.Web.Security.SqlMembershipProvider" applicationName="XXX" connectionStringName="XXX" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" minRequiredPasswordLength="5" minRequiredNonalphanumericCharacters="0" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>
    </providers>
</membership>

Просто измените значение "тайм-аута" в блоке аутентификации, чтобы быть более длинным значением, если Вы действительно хотите создать неопределенный период входа в систему. Я верю 432000 = 5 дней.

Если Вы хотите, чтобы Ваши пользователи смогли явно выйти из системы, просто назовите следующий метод в ответ на нажатие кнопки (или безотносительно):

FormsAuthentication.SignOut();

Надеюсь, это поможет.

19
ответ дан 30 November 2019 в 06:59
поделиться

При чтении кода Вы, возможно, случайно обнулили значение тайм-аута FormsAuthenticationTicket. Строка в Вашем коде, где Вы создаете чтения билета: -

Dim authTicket As FormsAuthenticationTicket = New FormsAuthenticationTicket(Username, True, Expiration.Subtract(Expiration).TotalMinutes)

Значение Expiration.Subtract(Expiration).TotalMinutes всегда будет "0".

Можно лучше использовать рукописный формат для создания тикета следующим образом, который привел бы к меньшей неоднозначности.

Public Shared Sub AuthenticateUser(ByVal Username As String)
    Dim Expiration As DateTime = DateTime.Now.AddMonths(3)
    Dim userData As String = String.Empty

    Dim authTicket As FormsAuthenticationTicket = _
       New FormsAuthenticationTicket( _
         Username, _
         DateTime.Now, _
         Expiration, _
         true, _
         userData, _
         FormsAuthentication.FormsCookiePath)
    Dim EncryptedTicket As String = FormsAuthentication.Encrypt(authTicket)
    Dim AuthCookie As New HttpCookie(FormsAuthentication.FormsCookieName, EncryptedTicket)
    AuthCookie.Expires = Expiration
    HttpContext.Current.Response.Cookies.Add(AuthCookie)
End Sub

Существует также хорошая статья Microsoft KB здесь о "Понимании Билета Аутентификации Форм и Cookie"

.

2
ответ дан 30 November 2019 в 06:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: