[RUBY] Empêcher les utilisateurs connectés d'accéder à une page spécifique en saisissant une URL

【Aperçu】

1. Conclusion </ b>

2. Quand cela arrive-t-il </ b>

3. Comment utiliser </ b>

4. Ce que j'ai appris d'ici </ b>

  1. Conclusion

Utilisez "redirect_to" et "sauf" </ b>!

  1. Quand cela arrive-t-il

buy_item_controller.rb


  def edit
    @buy_item = BuyItem.find(params[:id])
  end

Par exemple Je pense que je programme l'action «modifier» lors de l'édition de ma page, de mon compte ou de la page que j'ai publiée.

À ce stade, avec le programme ci-dessus seul, si vous tapez ~ ~ / ~ ~ / edit dans l'URL, même l'utilisateur déconnecté ou l'utilisateur connecté à la même application peut gérer différents comptes.


3. Comment utiliser

buy_item_controller.rb


def edit
    @buy_item = BuyItem.find(params[:id])
   redirect_to root_path unless current_user.id == @buy_item.user_id
end

Puisque nous utilisons la gemme "devise", "current_user.id" est inclus.

"Redirect_to root_path" est utilisé pour "retourner à la première page".

"Sauf si current_user.id == @ buy_item.user_id" est programmé comme "si l'utilisateur actuellement connecté n'est pas l'utilisateur vendeur de l'article".

Par conséquent, si le vendeur et l'utilisateur connecté sont différents, le produit ne peut pas être modifié.


4. Ce que j'ai appris d'ici

Je pensais que je le définirais avec "modifier" même si j'étais déconnecté. Cependant, si vous êtes déconnecté, la plage est trop éloignée et vous devez la définir pour toutes les actions. À ce moment-là, je me suis souvenu avant_action. Actions qui ne provoquent pas de boucles infinies en utilisant before_action et sauf À part (autre que l'index et le spectacle), j'ai pensé qu'il serait bon de programmer avec à moins.

buy_item_controller.rb


 before_action :move_to_index, except: [:index, :show]

  def move_to_index
    redirect_to new_user_session_path unless user_signed_in?
  end