1

新しいユーザーが私の Web サイトにサインアップすると、個人的なチュートリアルにリダイレクトされます。これは現在、サイトにサインアップするユーザーに対して機能しています。ただし、新しいユーザーが「facebook でサインイン」をクリックすると、間違った URL (チュートリアルをバイパスする前にサインインした場合に取得する URL) にリダイレクトされます。新しい Facebook ユーザーがチュートリアルにリダイレクトされ、既存の Facebook がバイパスされるように設定するのを手伝ってくれる人はいますか? (omniauth-facebook gem をインストールしました)

これが私のコードです。ご覧いただきありがとうございます。

ユーザー.コントローラー.rb

class UsersController < ApplicationController
  before_action :require_signin, except: [:new, :create]
  before_action :require_correct_user, only: [:show, :edit, :update, :image, :tutorial]
  before_action :require_admin, only: [:index, :destroy]


def new
  @user = User.new
end

def create
  @user = User.new(user_params) 
  if @user.save
    session[:user_id] = @user.id
    redirect_to users_tutorial_url (@user)
  else
    render :new
  end 
end

def tutorial
  @user = User.find(params[:id])
end

private

def user_params
  params.require(:user).permit(:id, :first_name, :last_name, :email, :born_in, :gender, :password, :password_confirmation)
end


def require_correct_user
 @user = User.find(params[:id])
   redirect_to products_url unless current_user? (@user)
 end
end

セッション.コントローラー.rb

class SessionsController < ApplicationController

  def new
  end

  def create
    if user = User.authenticate(params[:email], params[:password])
      session[:user_id] = user.id
      redirect_to(session[:intended_url] || filtered_products_path(:trending))
      session[:intended_url] = nil
    elsif 
    auth = request.env["omniauth.auth"]
    user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || User.create_with_omniauth(auth)
    session[:user_id] = user.id
    redirect_to(session[:intended_url] || filtered_products_path(:trending))
    session[:intended_url] = nil
    else  
      flash.now[:alert] = "Invalid email/password combination!"
      render :new
  end
end

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

User.rb (ユーザーモデル)

class User < ActiveRecord::Base
  before_create { generate_token(:auth_token) }


def self.authenticate(email, password)
  user = User.find_by(email: email)
  user && user.authenticate(password)
end


def generate_token(column)
  begin
    self[column] = SecureRandom.urlsafe_base64
  end while User.exists?(column => self[column])
end

  def self.create_with_omniauth(auth)
    where(provider: auth.provider, uid: auth.uid).first_or_create.tap do |user|
    user.provider = auth.provider
    user.uid = auth.uid
      user.email = auth.info.email
      user.first_name = auth.info.first_name
      user.last_name = auth.info.last_name
      user.email = auth.info.email
    user.oauth_token = auth.credentials.token
    user.oauth_expires_at = Time.at(auth.credentials.expires_at)
    user.save(:validate => false)  
    end
  end

end

omn​​iauth.rb OmniAuth.config.logger = Rails.logger

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, 'Facebook Key ###', 'Facebook Secret ###'  
end
4

0 に答える 0