2011-07-26 16 views
0

railscasts.comのおかげでカスタム認証がいくつか作成されましたが、ユーザーのプロフィールを編集しないように制限する必要があります。カスタム認証のヘルプが必要

はここに私のauthenticate_userとCURRENT_USER方法です:

private 

def current_user 
    @current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token] 
end 

def authenticate_user! 
    if current_user.nil? 
    redirect_to login_url, :alert => "You must first log in to access this page" 
    end 
end 

ここに私のがUserControllerでbefore_filterです:

before_filter :authenticate_user!, :only => [:edit, :update, :destroy]` 

EDIT:は感謝をalock27するためにそれを修正しました。

私は私のusers_controllerを編集し、次のように編集アクションを変更する必要がありました:

@user = User.find(params[:id]  
redirect_to root_url unless current_user == @user  
+0

あなたはDeviseを使用していますか? – efoo

+0

いいえ、それはrailscasts.comのチュートリアルを使用して構築されたカスタム認証システムです:p – imjp

答えて

1

私はあなたがこれをしたいと思う:

Adding security on routes in Rails

あなたがしてユーザーを見つける必要があります。id current_user = @userかどうかを確認する

+0

'if current_user == @ user'を実行しようとしましたが動作しません。 – imjp

+0

甘い、そのリンクの投稿がそれを修正! – imjp

1

編集、更新、破棄にIDを指定する必要はありません。あなたはすでにcurrenを持っていますt_user。 @user = User.find(id)を編集する代わりに、current_userを編集してください。したがって、認証機能によって、ユーザーは自分のプロファイルのみを編集できるようになります。

+0

あなたの/ my_id/editからurl idをusers/your_id/editに変更できないのはなぜですか? – efoo

+0

editメソッドでは、current_userを使用し、そのオブジェクトだけを編集します。すでに認証システムから取得しているため、ユーザーを取得するためにIDを使用しないでください。ルートを「users/edit」に変更することができます。 –