установить тайм-аут для токена в рельсах - PullRequest
2 голосов
/ 05 сентября 2011

Как мне установить тайм-аут для данного токена аутентификации? По истечении времени ожидания токен будет удален, и пользователь не сможет использовать его в своих запросах.

Я использую рельсы 3 и разрабатываю.

Ответы [ 3 ]

4 голосов
/ 06 сентября 2011

Я тоже искал эту функцию, но не нашел способа сделать это напрямую.

Вы можете сбросить маркер аутентификации при каждом входе в систему и использовать запоминаемый промежуточный параметр:

в вашем контроллере приложения, в after_sign_in_path_for ():

resource.reset_authentication_token

в devise.rb:

config.remember_for = 1.day

Или вы можете создать задание cron для периодической очистки недействительныхЗаписи authentication_token из таблицы пользователей.

2 голосов
/ 21 мая 2013

Я не уверен, что это именно то, что вы ищете, но это простой вариант в Devise. Если вы установите следующую опцию в config / initializers / devise.rb

config.timeout_in = 30. минут

тогда Devise должен истечь токен после 30 минут бездействия. Те же самые операции, которые Devise выполняет для аутентификации сеанса, должны также работать с токеном аутентификации.

Я использовал это в своем текущем проекте и протестировал его с помощью Timecop

it "should timeout without activity after 30 minutes" do
    auth_token = @user.authentication_token

    get "/frontend/users/#{@user.id}.json?auth_token=#{auth_token}"
    response.status.should == 200

    Timecop.travel(45.minutes.from_now)
    get "/frontend/users/#{@user.id}.json?auth_token=#{auth_token}"
    response.status.should == 401 

    Timecop.return
end

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

1 голос
/ 16 июля 2013

В файле инициализатора устройства

#/config/initializers/devise.rb

# ==> Configuration for :timeoutable
# The time you want to timeout the user session without activity. After this
# time the user will be asked for credentials again. Default is 30 minutes.
config.timeout_in = 1.day

# If true, expires auth token on session timeout.
config.expire_auth_token_on_timeout = true
...