0

多くの書籍やチュートリアルで、updateparams[:id] または session[:id] によってユーザー データを検索する方法として、ユーザー コントローラーにメソッドを実装している人を見かけます。ただし、セッションまたはアドレスバーを変更するだけで、他の人のアカウントにハッキングして、その人の情報を変更できると思います。そのため、ユーザーが他の情報を変更するのではなく、自分の情報のみを更新できるようにする方法を教えてください。

4

4 に答える 4

0

いくつかのものを非公開にする必要があるアプリケーションで作業しているときに、この問題が発生したことがあります。私がしたことは、優れた Rails プラクティスと共にDeviseCancanを使用することでした。認証にはDevise、承認にはcancanを使用しました。

場合によっては、hidden_​​field を使用してフォームからユーザー ID を渡すことができます。コントローラーの作成アクションで user_id を渡すことをお勧めします。また、devise を使用する場合は、現在のユーザーのセッションと ID に基づいてのみモデルを作成する current_user メソッドにアクセスできます。

cancan を使用してユーザー情報を保護します。たとえば、user2 が写真を見ることなく、そのようにユーザーの写真しか表示できなかったとします。

@photos = current_user.photos #only grabs current users photos

cancan を使用すると、次のようにして、ユーザーが users/2/edit のような URL を手動で入力するのを防ぐことができます。

アビリティ.rb

can :manage, Photo, :user_id => user.id

controller.rb

load_and_authorize_resource :photo

def index
  authorize! :index, @photo
end
于 2013-05-26T03:37:01.523 に答える
0

Treat the User model the same as any other model and add your authentication to it and require the user to be logged in (e.g. current_user for some auth methods) within the uddate method.

if current_user
  update_stuff and redirect
else
  :notice => 'Not authd' and redirect
end 
于 2013-05-25T02:01:42.737 に答える