ユーザーは複数のキーを持つことができ、それらを見るだけで区別できるようにしたいと考えています。各トークン タイプの前に数文字を追加したい (したがって、ses_
各セッション トークンの前に追加したい)。
これを達成する方法はありますか?私はDeviseを使用しています(bcryptを使用していると思いますか?)。Devise のドキュメント全体を読みましたが、トークンのトークン化をオーバーライドする場所が見つかりません。
ユーザーは複数のキーを持つことができ、それらを見るだけで区別できるようにしたいと考えています。各トークン タイプの前に数文字を追加したい (したがって、ses_
各セッション トークンの前に追加したい)。
これを達成する方法はありますか?私はDeviseを使用しています(bcryptを使用していると思いますか?)。Devise のドキュメント全体を読みましたが、トークンのトークン化をオーバーライドする場所が見つかりません。
私が目にする最も苦痛の少ないシナリオは、次の要点のように、ワーデンの下部にフックすることです。
https://gist.github.com/r00k/906356
あなたの場合、次のようになります。
# In config/initializers/local_override.rb:
require 'devise/strategies/authenticatable'
module Devise
module Strategies
class LocalOverride < Authenticatable
def valid?
# If token came as: "Authorization: SES blahblahhash"
token.provided? && ("ses" == token.scheme ||
# If token came as: "Authorization: SOMEOTHER blahblahhash"
"someother" == token.scheme)
# shorter: token.provided? && ["ses", "someother"].include? token.scheme
end
def token
@token ||= Rack::Auth::AbstractRequest.new(env)
end
def authenticate!
# assuming that you name columns in pattern : <scheme_name>_token
# so ses_token and someother_token would be just regular columns
# and you don't have to do any extra devise magic about them outside this strategy
# token.params will be a string containing blahblahhash
if user = User.where(token.scheme + "_token" => token.params).first
success!(user)
else
fail
end
end
end
end
end
Warden::Strategies.add(:local_override, Devise::Strategies::LocalOverride)
# In config/initializers/devise.rb
config.warden do |manager|
manager.default_strategies(:scope => :user).unshift :local_override