2016-03-23 28 views
0

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!

cevap

0

Neden iki modele ihtiyaç duyuyorsunuz? Aynı yetkiyi kullanabilir ve daha sonra kullanıcı veya tasarımcı arasındaki farkı bir rol ile yapabilirsiniz. Bazı demiryolları videolarına, oradaki farklı tekniklerle hızlanmak için bir göz atacağım. cancan ile

Roller: http://railscasts.com/episodes/192-authorization-with-cancan

İzle Kendi Auth yazma konusunda bir fikir edinmek için bu bir: http://railscasts.com/episodes/250-authentication-from-scratch-revised

1

beni burada benim deneyim paylaşalım, sana aynı şeyi yapmıştı şu anda yapıyorlar. Sorun, her iki kullanıcı için de tüm adımları izlemediniz. Bir tırmık yolları yapmak ve hem kullanıcı ve tasarımcı için vasiyetle tarafından oluşturulur kadar farklı yolları görüp uygun diyoruz, Bundan sonra

1) rails generate devise MODEL (user and designer) 

2) rails generate devise:controllers [scope] (users and designers) 

3) rails generate devise:views USER (users and deigners) 

-

İşte takip etmek adımların bir özetini sunuyoruz.

Bildiğim kadarıyla, kod tabanı daha sonra dağınık hale geldikçe farklı kullanıcılar oluşturmak yerine rol kullanmak daha iyidir. Bir tane oluşturmaya yeni başlıyorsanız, roller ilerlemenin bir yoludur.

İlgili konular