Burada birkaç çözüm gördüm, fakat hiç sorunumu yanıtlamadı. İki model üretmek için kullanıyorum: Kullanıcı ve Tasarımcı. Ve bu iki model için ayrı ayrı kaydolmak/imzalamak için Omniauth kullanmalıyım. Şu anda bu ben ne var:Devise + Omniauth çoklu modeller
User.rb
def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
user.provider = auth.provider
user.uid = auth.uid
user.user_name = auth.info.name
user.email = auth.info.email
user.password = "password"
user.skip_confirmation!
end
user_authentications_controller.rb
class UserAuthenticationsController < Devise::OmniauthCallbacksController
def create
begin
@user = User.from_omniauth(request.env['omniauth.auth'])
sign_in_and_redirect @user
#redirect_to root_url, notice: "Signed in!"
flash[:success] = "Welcome, #{@user.first_name}!"
UserMailer.welcome(@user).deliver_now
rescue
flash[:warning] = "There was an error while trying to authenticate you..."
end
end
end
designer.rb
def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_create do |designer|
designer.provider = auth.provider
designer.uid = auth.uid
designer.user_name = auth.info.name
designer.email = auth.info.email
designer.password = "password"
designer.skip_confirmation!
end
end
designer_authentication_controller.rb
DesignerAuthenticationsController < Devise::OmniauthCallbacksController
def create
begin
@designer = Designer.from_omniauth(request.env['omniauth.auth'])
sign_in_and_redirect @designer
#redirect_to root_url, notice: "Signed in!"
flash[:success] = "Welcome, #{@designer.first_name}!"
UserMailer.welcome(@designer).deliver_now
rescue
flash[:warning] = "There was an error while trying to authenticate you..."
end
end
end
routes.rb
devise_scope :user do get "/auth/:provider/callback" => "user_authentications#create" end
devise_scope :designer do get "/auth/:provider/callback" => "designer_authentications#create" end
Benim sorunlar şunlardır:
1) olursa olsun hangi ı kaydolmayı sayfa, tasarımcı veya kullanıcı gelen, O Kullanıcı olarak kayıt edecektir. Anlıyorum çünkü her iki kayıt için user_authentications_controller kullanıyor. Herhangi bir fikir Kayıt defteri tarafından hangi denetleyiciyi arayacağını belirlemelerine nasıl izin verebilirim?
2) Doğru şekilde mi yapıyorum yoksa birden fazla model kaydı için daha iyi yollar var mı?
Teşekkürler. Ve lütfen yardım edin!