2016-11-18 25 views
1

我在我的控制器這段代碼和模型繞過控制器中兩個不同變量的模型中的方法?

SessionsController

def create 
    user = User.from_omniauth(env["omniauth.auth"]) 
    user.skip_password_validation = true 

    unless user.present? 
    user = User.find_by(email: params[:session][:email].downcase) 
    if user && user.authenticate(params[:session][:password]) 
     log_in user 
     redirect_to user 
     # Log the user in and redirect to the user's show page. 
    else 
     # Create an error message. 
     flash.now[:danger] = 'Invalid email/password combination' 
     render 'new' 
    end  
    else   
    log_in user 
    redirect_to user 
    end 
end 

用戶模型

def User.digest(string) 
    cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : 
                BCrypt::Engine.cost 
    BCrypt::Password.create(string, cost: cost) 

    end 

    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.name = auth.info.name 
     user.email = auth.info.email 
     user.oauth_token = auth.credentials.token 
     user.oauth_expires_at = Time.at(auth.credentials.expires_at) 
     user.save!  
    end 
    end 
end 

,因爲我有我的會話控制器,兩個不同的登錄方法我需要跳過方法在我的用戶模型中。我查閱了一些內容,比如過濾器之前,動作和屬性訪問器之前以及搜索網頁,但似乎無法找到如何跳過模型中的方法,所以我可以繞過我在會話中分配的每個用戶變量控制器?也就是說,一個用於omniauth facebook,另一個用於標準登錄。

+0

你想要哪種方法跳過? – akash

+0

嗨,我想跳過'self = User.find_by(email:params [:session] [:email] .downcase''def self.from_omniauth(auth)'方法'這是基本登錄引起的一個'未定義的方法'提供者'錯誤,所以跳過我已經分配的第二個'用戶'變量 –

回答

1

如果我正確理解的問題,在平原AUTH的情況下,就沒有env["omniauth.auth"]集,所以一個可能會去:

def create 
    user = if env["omniauth.auth"] 
    User.from_omniauth(env["omniauth.auth"]).tap do |u| 
     u.skip_password_validation = true 
    end 
    else 
    User.find_by(email: params[:session][:email].downcase).tap do |u| 
     unless u && u.authenticate(params[:session][:password]) 
     # Create an error message. 
     flash.now[:danger] = 'Invalid email/password combination' 
     render 'new' 
     return 
     end 
    end 
    end 

    log_in user 
    redirect_to user 
end 
+0

是的,這是正確的!除了用'user'替換'u',它工作得很好謝謝! –

+1

我已經糾正了上面代碼中的'u' /'user'毛刺。 – mudasobwa

+0

還沒有你havnt :) –

相關問題