2017-04-06 1 views
0

Selon docs J'ai implémenté l'authentification. Voici mon application_controller.rbOmniAuthGoogleOAuth2 dans Rails 4 rediriger vers l'URL de demande d'origine après la connexion réussie

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 
    helper_method :current_user 
    before_action :auth_user 

    def current_user 
    @current_user ||= User.find(session[:user_id]) if session[:user_id] 
    end 

    private 
    def auth_user 
    current_user 
    if @current_user.nil? 
     flash[:notice] = "You need to be logged in to access this part of the site" 
     redirect_to root_path(url: request.url) 
    end 
    end 
end 

Je me sers de ce "Connexion" lien

<%= link_to "Sign in with Google", "/auth/google_oauth2?url=#{@url}", id: "sign_in" %> 

L'itinéraire: get 'auth/:provider/callback', to: 'user_sessions#create'

Le contrôleur:

class UserSessionsController < ApplicationController 
    skip_before_filter :auth_user 
    def create 
    url = params[:url] 
    auth = env["omniauth.auth"] 
    if auth 
     user = User.from_omniauth(auth) 
     session[:user_id] = user.id 
     flash[:notice] = "Login Sucessful!" 
     redirect_to url 
    else 
     flash[:notice] = "error" 
     redirect_to root_path 
    end 

    end 

    def destroy 
    session[:user_id] = nil 
    redirect_to root_path 
    end 
end 

Maintenant, quand je sans une session valide essayez d'aller à localhost:3000/privileged Je suis redirigé vers e URL racine et le lien de connexion est la suivante:

http://localhost:3000/auth/google_oauth2?url=http://localhost:3000/privileged 

Cependant quand je clique, je reçois une connexion réussie mais une erreur que je ne peux pas rediriger à zéro. Pourquoi le paramètre est-il abandonné? Ou existe-t-il un meilleur moyen de rediriger l'utilisateur vers l'URL initialement demandée après une connexion réussie en général?

Répondre

0

Cela fonctionne quand j'ai changé le paramètre url dans le lien à ?origin=... et dans le contrôleur je peux alors y accéder via url = request.env['omniauth.origin']. Cela permet à l'instruction redirect_to url de fonctionner