2016-04-29 2 views
0

Im, используя devise в моем приложении rails и все работает нормально, что я пытаюсь сделать сейчас, это разрешить пользователям входить в мое приложение, используя их учетную запись github и создавать профиль.Создайте пользователя auth с помощью devize

User.rb

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable, :omniauthable 

    has_one :profile 

    after_create :build_profile 

    def build_profile 
    self.create_profile 
    end 

    def self.create_with_omniauth(auth) 
    user = first_or_create do |user| 
     user.provider = auth['provider'] 
     user.uid = auth['uid'] 
     user.email = auth['info']['email'] 
     user.password = Devise.friendly_token[0,20] 
    end 
    end 
end 

routes.rb

devise_for :users, :controllers => { :omniauth_callbacks => "callbacks" } 

callbacks_controller.rb

class CallbacksController < Devise::OmniauthCallbacksController 
    def github 
    @user = User.from_omniauth(request.env["omniauth.auth"]) 
    sign_in_and_redirect @user 
    end 
end 

Я побежал правильную миграцию добавить поставщика и Uid столбец в таблице пользователей

rails g migration AddColumnsToUsers provider uid 

def change 
add_column :users, :provider, :string 
add_column :users, :uid, :string 
end 

конфигурации/Инициализаторы/devise.rb

config.omniauth :github, 'CLIENT_ID', 'APP_SECRET', :scope => 'user:email' 

Когда я создать пользователя с помощью devise все это прекрасно работает и созданы пользователи, но когда я нажимаю войти в систему с GitHub на моей странице регистрации она сливает Завещание учетной записи и учетной записи github, оставив мне одну учетную запись, не создавая учетную запись с учетными данными пользователя github. Даже если я попробую и войщу в систему с использованием двух разных учетных записей github, он по-прежнему по какой-то причине использует только первую учетную запись github.

проблема github пользователь может войти, но они не создаются как пользователи, используя их учетные данные github, мне нужно, чтобы пользователи вошли в систему и создали профиль со мной.

ответ

0

В вики на DEViSE в это сказано:

where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 

Но я удалил этот метод where. Теперь вы буквально берете запись «ПЕРВАЯ» из базы данных и обновляете ее.

Если записей нет в базе данных, будет создана запись, но при последующих регистрациях вы по-прежнему будете получать первую запись и изменять ее. Так что я изменил:

мой User.rb к:

def self.from_omniauth(auth) 
    user = where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 
     user.email = auth.info.email 
     user.password = Devise.friendly_token[0,20] 
    end 
    end 

и обратные вызовы контроллер:

@user = User.from_omniauth(request.env["omniauth.auth"]) 
1

ли вы дать полномочия в конфигурации/Инициализаторы/omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :github, ENV['GITHUB_KEY'], ENV['GITHUB_SECRET'], scope:"user:email,user:follow" 
end 

вы можете пройти по Link

Смежные вопросы