0

ユーザーが現在 Web サイトにログインしているかどうかを制御する必要がありますが、この制御に使用した変数を初期化するのに問題があります: session[:user_id].

これは私が使用したコードです:

def authenticate_user
    if session[:user_id].nil?
      redirect_to(:controller => 'users', :action => 'index')
      return false
    else
      # set current_user by the current user object
      @current_user = User.find session[:user_id]
      return true
    end
 end

ログインしていないユーザーをブロックするすべてのコントローラーで、次のコードを使用してこのメ​​ソッドを呼び出します。

before_filter :authenticate_user, :only => [:index,:show,:edit]

私の意見では、問題はsession[:user_id]変数です。ユーザーが私の Web サイトにアクセスすると、変数が初期化されないnilため、コントロールが機能しません。

インデックス ページのコントローラで変数を初期化できますが、この方法は間違っています。

例、ログインせずにこのページをリクエストした場合:

127.0.0.1:3000/メニュー

エラーは次のとおりです。

undefined local variable or method `authenticate_user' for #<MenusController:0x007faa6e5a4c20>

アップデート:

これでエラーはなくなりましたが、ユーザーがログインしていない場合の状態:

if session[:user_id].nil? 

検証されていません。

ユーザーコントローラーでこのメソッドを宣言すると:

before_filter :initializes



def initializes
    session[:user_id]=nil;
  end

できます!また、ユーザーが「インデックス ページ (ログイン ページ)」を必要としない場合でも、その理由がわかりません。

4

3 に答える 3

0

あなたは authenticate_use を定義しましたが、フィルター呼び出しに authenticate_user があります

于 2013-06-18T11:20:45.843 に答える
-1

認証には Devise gem を使用する必要がありますhttps://github.com/plataformatec/devise

于 2013-06-19T13:09:11.563 に答える