[RUBY] Rails Méthode d'interdiction de frappe directe (ne pas passer à l'écran d'édition d'une autre personne en entrant une URL)

Qu'est-ce qu'une interdiction de frappe directe?

Avec 7 mois d'expérience en programmation, je ne sais toujours pas à droite ou à gauche. Lors de la réalisation du devoir, il y avait une condition selon laquelle "* Veuillez définir de telle sorte que seuls les affiches * puissent modifier et supprimer." Il est dit qu'il est ** interdit de taper directement ** (car vous pouvez modifier les messages d'autres personnes par ** directement ** https: /// XXX / modifier ** dans l'URL, ... ?).

スクリーンショット 2020-10-31 18.00.23.png

Après un certain temps, il était temps de créer un portfolio, et il s'est avéré que je pouvais le frapper directement après qu'il soit terminé. Je l'ai oublié par inadvertance, alors j'enregistrerai la méthode d'interdiction de la frappe directe dans un mémorandum.

Si vous n'êtes pas connecté, vous ne pouvez pas juger * "Affiches uniquement" *, alors comment faire des applications et des pages d'accueil qui n'ont pas de fonction de connexion? Il sera étudié et appris dans le futur. (Au fait, il y avait une entreprise qui était en difficulté car elle me conduisait directement sur le site de réservation ...)

Quoi qu'il en soit, même s'il est facile d'interdire les coups directs, c'est une fonctionnalité à ne pas oublier, car elle peut être assez difficile à oublier!

Code d'interdiction de frappe directe

Tout d'abord, ajoutez la méthode before_action à application_controller.

application_controller.rb


class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?

Ensuite, ouvrez la page du contrôleur dans laquelle vous souhaitez interdire les frappes directes. (Par exemple, si la page de publication est nommée Post, post_controller.rb)

post_controller.rb


class PostsController < ApplicationController
    before_action :authenticate_user!
    before_action :correct_post,only: [:edit,:XXX]

Au fait, before_action: authenticate_user! Ne peut être utilisé que par les utilisateurs connectés! est ce que cela signifie.

Before_action: correct_post, uniquement: Ajouter [: edit,: XX]. : XX ajoute d'autres actions que vous ne voulez pas toucher directement.

Ajoutez également le code suivant sous le même post_controller.rb (ci-dessus privé).

post_controller.rb


def correct_post
        @post = Post.find(params[:id])
    unless @post.user.id == current_user.id
      redirect_to posts_path
    end
end

Pour redirect_to posts_path, veuillez décrire la destination du lien à ignorer si quelqu'un d'autre que l'affiche le frappe directement. Avec ce qui précède, je pense que la frappe directe peut être interdite!

Au fait, il y a current_post car il est similaire à correct_post. Grâce à cela, je me suis trompé dans la tête, et j'écris un code qui interdit les frappes directes, donc je ne peux pas l'interdire! Je tenais ma tête pendant quelques minutes.

C'est également un point auquel il faut faire attention.

Recommended Posts

Rails Méthode d'interdiction de frappe directe (ne pas passer à l'écran d'édition d'une autre personne en entrant une URL)
Que faire lorsque javax.el.ELException: Pas une expression de méthode valide: s'affiche lorsque l'écran JSF est affiché
[Rails] Comment obtenir l'URL de la source de transition et la rediriger
[Rails] Comment empêcher la transition d'écran
Transition d'écran par méthode Post [Java]
Comment faire de https le schéma de l'URL générée par l'assistant d'URL de Rails