2014-11-24 38 views
0

這裏是我的模型爲什麼ActiveModel :: ForbiddenAttributesError錯誤?

class User < ActiveRecord::Base 
    def self.from_omniauth(auth) 
    where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user| 
     user.provider = auth.provider 
     user.uid = auth.uid 
     user.name = auth.info.name 
     user.oauth_token = auth.credentials.token 
     user.oauth_expires_at = Time.at(auth.credentials.expires_at) 
     user.save! 
    end 
    end 
end 

這裏是我的控制器

class SessionsController < ApplicationController 
    def create 
    user = User.from_omniauth(env["omniauth.auth"]) 
    session[:user_id] = user.id 
    redirect_to root_url 
    end 

def destroy 
    session[:user_id] = nil 
    redirect_to root_url 
end 
end 

我試圖尋找到數據庫中,如果任何重複的條目已經取得進展。但不是。請讓我知道你是否可以幫忙。

+0

請添加您的服務器日誌。這樣可以更具體地解釋您的問題 – Rubyrider 2014-11-24 13:58:51

+0

我克服了這個問題。現在它說用戶表不存在。 @Rubyrider – mlemboy 2014-11-24 14:01:23

+0

然後不知何故,你做了這樣的操作或者你的數據庫已經被移走了。請運行遷移或查看是否需要再次運行rake db:setup。 – Rubyrider 2014-11-24 14:02:38

回答

0

只要改變其中(狀態):

where(provider: auth.provider, uid: auth.uid) 

首屆方法失敗,因爲該方法的#permitted? AR調用(如果定義)清理屬性。

> h = auth.slice(:provider, :uid) 
> h.class 
=> OmniAuth::AuthHash < Hashie::Mash 
> h.permmitted? 
> false 

但是,一個簡單的哈希將不會有#許可?定義的,因此它只會繼續:

> h = { provider: auth.provider, uid: auth.uid } 
> h2.permitted? 
NoMethodError: undefined method `permitted?' for {:provider=>"facebook", :uid=>"XXXX"}:Hash 

參考:https://github.com/rails/rails/blob/master/activemodel/lib/active_model/forbidden_attributes_protection.rb#L19

相關問題