0

ユーザーは複数のキーを持つことができ、それらを見るだけで区別できるようにしたいと考えています。各トークン タイプの前に数文字を追加したい (したがって、ses_各セッション トークンの前に追加したい)。

これを達成する方法はありますか?私はDeviseを使用しています(bcryptを使用していると思いますか?)。Devise のドキュメント全体を読みましたが、トークンのトークン化をオーバーライドする場所が見つかりません。

4

1 に答える 1

0

私が目にする最も苦痛の少ないシナリオは、次の要点のように、ワーデンの下部にフックすることです。

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
于 2013-06-24T15:59:25.710 に答える