ProgateでTwitterのようなアプリを作っているのですが、ユーザー情報の更新時のURLに対してアクセス制限をかけようと思ったのですが、自分のやり方だと制限がかからなかったので質問させていただきました。更新時のURLというのは、ユーザー情報を編集するページ自体のURLではなく、更新をした瞬間のURL、いわゆるviewのないURLのことです。(うまく説明できずすみません)
上手くいかない点に関して下に具体的に書いたので、なぜ自分のやり方だとうまくいかないのかアドバイスいただきたいです。因みに正しいやり方については既に見つかっておりますので、下のやり方が何故ダメなのかについてのみご教授いただければ幸いです。
※アクセス制限というのはどんな制限かというと、ある特定のユーザーが自分自身以外のユーザの編集を行うことができないようにするという制限のことです。
うまくいかない点
下のrailsコード欄の中の @user.id != @current_user.id を条件としたif文が制限を試みているコードの部分です。しかし、更新時のURLにアクセスしてみたところ、redirect_toが働いてないからかずっとページ読み込み中のような状態になってしまいうまくいきません。
※ @userには編集ページのidをもとにデータベースから取得したユーザーのデータが入っており、@current_userにはbefore_actionにおいてsession[:user_id]を代入しておくことで、ログイン中のユーザーのidが入っています。
Rails
1def update 2 @user = User.find_by(id: params[:id]) 3 @user.name = params[:name] 4 @user.email = params[:email] 5 6 if @user.id != @current_user.id 7 flash[:notice] = "権限がありません" 8 redirect_to("/posts/index") 9 end 10 11 if params[:image] 12 @user.image_name = "#{@user.id}.jpg" 13 image = params[:image] 14 File.binwrite("public/user_images/#{@user.image_name}", image.read) 15 end 16 17 if @user.save 18 flash[:notice] = "ユーザー情報を編集しました" 19 redirect_to("/users/#{@user.id}") 20 else 21 render("users/edit") 22 end 23 end
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/10 06:23