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