Ich habe hier ein paar Lösungen gesehen, aber keine hat mein Problem beantwortet. Ich benutzte Devise, um zwei Modelle zu generieren, nämlich: Benutzer und Designer. Und ich muss Omniumuth verwenden, um sich für diese zwei Modelle getrennt zu registrieren/zu registrieren. Zur Zeit ist es das, was ich habe:Devise + Omniauth mehrere Modelle
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
Meine Probleme sind:
1) Ganz gleich, von welcher Seite ich registrieren, Designer oder Benutzer an, als Benutzer anmelden wird. Ich verstehe das, weil es user_authentications_controller für beide Anmeldung verwendet. Irgendwelche Ideen, wie kann ich bestimmen lassen, welchen Controller es auf der Anmeldeseite aufrufen wird?
2) Mache ich den richtigen Weg, oder gibt es bessere Möglichkeiten für die Anmeldung mehrerer Modelle?
Danke. Und bitte hilf!