[RUBY] [Rails] Comment enregistrer temporairement l'URL de demande d'un utilisateur qui n'est pas connecté et revenir à cette URL après la connexion

Le titre est long. Voici un résumé de l'envoi amical.

Qu'est-ce que le transfert 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.

Comment faites-vous cela?

Le flux général est le suivant.

  1. Enregistrez temporairement l'URL demandée
  2. Passez à l'écran de connexion et confirmez la connexion
  3. Revenir à l'URL demandée

Définition de la méthode

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.

Enregistrer temporairement l'URL demandée + confirmation de connexion

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

Revenir à l'URL demandée

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.

à la fin

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.

Recommended Posts

[Rails] Comment enregistrer temporairement l'URL de demande d'un utilisateur qui n'est pas connecté et revenir à cette URL après la connexion
[rails devise] Comment transférer les utilisateurs qui ne sont pas connectés à la page de connexion
Comment résoudre le problème lorsque la valeur n'est pas envoyée lorsque le formulaire est désactivé dans les rails et envoyé
[Rails] Comment obtenir l'URL de la source de transition et la rediriger
Comment résoudre le problème que l'image du site Web ne s'affiche pas après le déploiement sur heroku dans Rails 5
Cas où les utilisateurs sont déconnectés lors de la modification d'une application (rails)
[Rails] Comment obtenir les informations sur l'utilisateur actuellement connecté avec devise
Comment contraindre l'action de la destination de transition lorsqu'elle n'est pas connectée
[Rails] Comment résoudre le décalage temporel de created_at après la méthode de sauvegarde
Comment obtenir l'ID d'un utilisateur qui s'est authentifié avec Firebase dans Swift
Comment créer une combinaison unique de données dans la table intermédiaire des rails
Comment empêcher les utilisateurs qui ne sont pas connectés de passer à la nouvelle page ou à la page de modification
Emplacement de la définition de la méthode Résumé de la vérification Lorsque défini dans le projet et Rails / Gem
[Webpacker] Résumé de l'installation de Bootstrap et jQuery dans Rails 6.0
Comment supprimer de grandes quantités de données dans Rails et problèmes
[Rails] Lire le RSS du site et renvoyer le contenu au premier plan
Comment identifier le chemin sur lequel il est facile de se tromper
Créer une ArrayList qui vous permet de lancer et de récupérer les coordonnées d'un plan bidimensionnel
Comment résoudre le problème que le bean n'est pas traité correctement lorsqu'il est imbriqué dans Spring Batch
Comment faire fonctionner IGV en utilisant la communication par socket, et l'histoire de la création d'un Ruby Gem en utilisant cette méthode
Un mémo sobrement accro à la demande de multipart / form-data
Comment interagir avec un serveur qui ne plante pas l'application
Comment tester une méthode privée et la simuler partiellement en Java
L'histoire de l'oubli de fermer un fichier en Java et de l'échec
A vous qui regrettez que la conversion de JODConverter + LibreOffice soit lente
Confirmation et refactoring du flux de la requête au contrôleur dans [httpclient]
[Rails] À propos de l'erreur selon laquelle l'image n'est pas affichée dans l'environnement de production
Comment mettre à jour les modifications utilisateur dans Rails Devise sans entrer de mot de passe
Comment modifier le nombre maximum et maximum de données POST dans Spark
[Rails] Utilisez le dispositif pour obtenir des informations sur l'utilisateur actuellement connecté
Comment changer la valeur d'une variable à un point d'arrêt dans intelliJ
Comment obtenir le chemin absolu d'un répertoire s'exécutant en Java
[Rails] Comment créer une table, ajouter une colonne et changer le type de colonne
[Rails] La cause de l'impossibilité de publier des messages était form_with
Comment faire de https le schéma de l'URL générée par l'assistant d'URL de Rails
Modifiez la destination d'enregistrement de l'image en S3 dans l'application Rails. Partie 2
Ubuntu 18 est le système d'exploitation qui ajoute une carte réseau à une instance de serveur dans le cloud de Sakura et attribue une adresse IP locale.
Comment intégrer et afficher des vidéos youtube dans Rails (vous pouvez également obtenir l'URL saisie en modifiant)
Dans le thème "concentration totale", "Comment utiliser Docker" est résumé pour le Mameko virtuel qui dort en moi.
Comment résoudre l'erreur'ActionView :: Template :: Error (L'actif "application.css" n'est pas présent dans le pipeline d'actifs. '"Lors de la précompilation d'actifs Rails
Que faire à propos de "Un serveur est déjà en cours d'exécution ..." qui s'est produit sans désactiver le serveur de rails dans le terminal
Comment insérer une vidéo dans Rails
Une solution à une erreur qui vous met en colère parce que vous ne suivez pas le paramètre par défaut de MySQL ONLY_FULL_GROUP_BY en production et qu'il n'est pas unique
J'ai essayé de créer une application Web qui recherche les tweets avec vue-word cloud et examine la tendance de ce qui est écrit dans le profil associé
Comment résoudre les erreurs qui se produisent lors du test d'intégration "Ruby on Rails"
[Erreur] Comment résoudre le phénomène selon lequel l'écran ne passe pas après l'édition
Comment définir quand "Le constructeur Empty () n'est pas visible" se produit dans junit
Est-il courant de ne pas écrire la balise de fermeture de la balise <P> dans Javadoc?
Comment déployer des conteneurs distants VSCode dans un projet docker-compose qui comprend à la fois l'API et l'application frontale
Convertir en balise dans la chaîne d'URL avec Rails
Bouton [Rails] pour revenir en haut de la page
Comment implémenter une fonctionnalité similaire dans Rails
Comment créer facilement un pull-down avec des rails