Le titre est long. Voici un résumé de l'envoi amical.
C'est une sorte de processus comme "La page que vous avez demandée, la page après la connexion, mais vous ne vous êtes pas encore connecté. Je vous guiderai vers la page vers laquelle vous vouliez aller après la connexion." Conception aimable que vous voyez souvent. C'est bon.
Le flux général est le suivant.
Préparez une méthode (1) pour enregistrer temporairement la requête et une méthode (3) pour revenir à l'URL enregistrée temporairement. Cette fois, dans sessions_helper.rb
, écrivez comme suit.
helpers/sessions_helper.rb
# 1.Enregistrer temporairement l'URL demandée
def store_location
session[:forwarding_url] = request.original_url if request.get?
end
# 3.Revenir à l'URL demandée
def redirect_back_or(default)
redirect_to(session[:forwarding_url] || default)
session.delete(:forwarding_url)
end
Enregistrez l'URL demandée (request.original_url) sous session [: forwarding_url]
dans 1. ʻSi request.get? `Limite le type de demande aux actions GET uniquement.
3 est le processus pour revenir à l'URL enregistrée temporairement ou à l'URL spécifiée par défaut. Considérez même si l'URL n'existe pas||
Après cela, l'URL définie par défaut peut être saisie.
De plus, si vous conservez les informations de session, elles seront lues et étranges à la prochaine connexion, donc l'URL temporairement sauvegardée avec session.delete (: forwarding_url)
sur la deuxième ligne de la méthode Effacer.
Appelez store_location
pour stocker temporairement l'URL à laquelle vous essayez d'accéder.
Ici, sous privé de ʻusers_controller.rb`, je vais l'écrire avec la description pour vérifier si l'utilisateur connecté est.
users_controller.rb
class UsersController < ApplicationController
before_action :user_login_required
・
・
・
private
def user_login_required
unless logged_in? #Lorsqu'il n'est pas connecté
store_location #Enregistrez temporairement l'URL ici!
flash[:danger] = "Veuillez vous connecter" #Afficher le message flash
redirect_to login_url #Envoi forcé à la page de connexion
end
end
Utilisez redirect_back_or (par défaut)
pour spécifier la destination de la transition après la connexion. Ce n'est pas grave si vous écrivez ce qui suit à l'endroit où le processus de connexion est effectué.
controllers/sessions_controller.rb
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
log_in user
params[:session][:remember_me] == '1' ? remember(user) : forget(user)
flash[:success] = "Vous êtes maintenant connecté"
#Spécifiez la destination de la redirection ci-dessous. la valeur par défaut utilise ici l'utilisateur, mais l'utilisateur_Peut être écrit comme url
redirect_back_or user
else
flash.now[:danger] = 'Je n'ai pas réussi à me connecter'
render 'new'
end
end
Ceci termine la mise en œuvre! Si vous osez vous expulser d'une URL existante puis vous connecter, vous serez redirigé vers cette URL. Merci pour votre soutien.
Comme mentionné ci-dessus, j'ai essayé de réorganiser chaque rôle à ma manière afin qu'il soit facile à comprendre en un coup d'œil. J'espère que cela vous aidera.
J'ai fait référence à ce qui suit lors de sa mise en œuvre. Merci beaucoup.