[RUBY] Verhindern Sie, dass angemeldete Benutzer eine bestimmte Seite eingeben, indem Sie eine URL eingeben

【Überblick】

1. Schlussfolgerung </ b>

2. Wann passiert es? </ b>

3. Verwendung von </ b>

4. Was ich hier gelernt habe </ b>

  1. Fazit

Verwenden Sie "redirect_to" und "es sei denn" </ b>!

  1. Wann passiert es?

buy_item_controller.rb


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

Zum Beispiel Ich glaube, ich programmiere die Aktion "Bearbeiten", wenn ich meine Seite, mein Konto oder die von mir gepostete Seite bearbeite.

Wenn Sie zu diesem Zeitpunkt allein mit dem oben genannten Programm ~ ~ / ~ ~ / edit in die URL eingeben, kann sogar der abgemeldete Benutzer oder der bei derselben Anwendung angemeldete Benutzer unterschiedliche Konten betreiben.


3. Verwendung

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

Da wir gem "devise" verwenden, ist "current_user.id" enthalten.

"Redirect_to root_path" wird verwendet, um "zur obersten Seite zurückzukehren".

"Es sei denn, current_user.id == @ buy_item.user_id" ist programmiert als "wenn der aktuell angemeldete Benutzer nicht der Verkäufer des Artikels ist".

Wenn sich der Verkäufer und der angemeldete Benutzer unterscheiden, kann das Produkt daher nicht bearbeitet werden.


4. Was ich von hier gelernt habe

Ich dachte, ich würde es mit "Bearbeiten" einstellen, selbst wenn ich abgemeldet wäre. Wenn Sie jedoch abgemeldet sind, ist der Bereich zu weit und Sie müssen ihn für alle Aktionen festlegen. Zu dieser Zeit erinnerte ich mich an before_action. Aktionen, die mit before_action und Except keine Endlosschleifen verursachen Abgesehen von (ohne Index und Show) dachte ich, es wäre gut, mit zu programmieren, es sei denn.

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