OmniAuthGoogleOAuth2 в Rails 4 перенаправляет на исходный URL-адрес запроса после успешного входа

Согласно документам, я реализовал аутентификацию. Вот мой application_controller.rb

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

И я использую эту ссылку "Войти"

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

Маршрут: get 'auth/:provider/callback', to: 'user_sessions#create'

Контроллер:

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

Теперь, когда я без действительной сессии пытаюсь перейти к localhost:3000/privileged Я перенаправлен на корневой URL, и ссылка для входа в систему это:

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

Однако, когда я нажимаю на нее, я получаю успешный вход в систему, но затем появляется ошибка, которую я не могу перенаправить на ноль. Почему пропал параметр? Или есть лучший способ перенаправить пользователя на первоначально запрошенный URL после успешного входа в систему вообще?

1 ответ

Решение

Это работает, когда я изменил URL Parmaeter в ссылке на ?origin=... и в контроллере я могу получить к нему доступ через url = request.env['omniauth.origin'], Это делает redirect_to url постановка работы

Другие вопросы по тегам