2017-05-17 10 views
1

私は非常に基本的な静的なページのレールアプリを持っているので、これらの静的なページにアクセスする人々のための多くのユーザー名とパスワードを作成したいと思います。もちろん、rails apiにはhttp_basic_atenticateがありますが、どのように複数のユーザーがいるはずですか?Rails複数のユーザーのhttp基本認証?

明確にするために、私は複数のユーザーのためにhttp_basicを使用したいです。これについてどうやって行くの?

例。 user1にpassword1、user2にpassword2、user3にpassword3などがありますか?

class StaticController < ApplicationController 

http_basic_authenticate_with :name => "user", :password => "password" 


    def home 
    end 

    def content 
    end 

end 
+2

あなたはなど、ユーザーのパスワードを忘れてしまったパスワードを、独自のモデルビューとコントローラを作成する上で設定されていますか..?それはセットアップ作業のかなり多くを節約し、あなたのためのすべての足の仕事は – Mark

+0

いいえ、私は使いたくないんとして、ほとんどのレールのユーザーは、考案の宝石、https://github.com/plataformatec/deviseを使用します宝石。私は厳密に、少数のユーザーのために、httpの基本的な方法を使いたい。私はdeviseが行く方法だと知っていますが、このユースケースでは、私がやろうとしていることはあまりにも残忍です。 複数のユーザーを持つための引数を渡す方法はありませんか?私はそれが私が理解できない構文の問題だと思う。 – mazing

+0

私は、これは良い解決策と同様の問題だと思う:http://stackoverflow.com/questions/4536278/ruby-on-rails-how-do-you-do-http-auth-over-multiple-controllers – Mark

答えて

0

答えを見つけました。 def endブロックにUSERS {.. etc}の配列を渡し、必要に応じて呼び出します。

def authenticate 
    authenticate_or_request_with_http_digest do |username| 
    USERS[username] 
    end 
end 
2

シンプルなソリューション:

h = Hash[user1: "Password1", user2: "Password2"] 
authenticate_or_request_with_http_basic do |id, password| 
    if h.has_key?(id.to_sym) 
    password == h[id.to_sym] 
    end 
end  
0

以前の答えは、私はもう少し汎用的かつ再利用可能であるアプローチを共有したい、確かに100%正確である(ただし、基本的に使用していますが前回の回答と同じ方法):

アプリ/コントローラ/懸念/ guest_list_auth.rb

module GuestListAuth 
    extend ActiveSupport::Concern 

    included do 
    cattr_accessor :guest_list 
    self.guest_list = :everyone_is_invited 

    before_action :perform_guest_list_auth 
    end 

    class_methods do 
    def authenticate_against_guest_list(guest_list) 
     self.guest_list = guest_list 
    end 
    end 

    protected 
    def perform_guest_list_auth 
    return if guest_list == :everyone_is_invited 
    authenticate_or_request_with_http_basic('Application') do |name, password| 
     guest_list.present? && 
     guest_list.has_key?(name.to_sym) && 
     guest_list[name.to_sym] == password.to_s 
    end 
    end 
end 

アプリ/コントローラ/ static_controller.rb

class StaticController < ApplicationController 
    include GuestListAuth 
    authenticate_against_guest_list (
    { 
     demo01: '...', 
     demo02: '...', 
     demo03: '...', 
    } 
) 

    def home 
    end 

    # ... 
end