2012-06-18 4 views
3

안녕 내가 페이스 북의 로그인을 autenticate하기 위해 고안 및 omniauth 사용하고 있지만 다음과 같은 오류 얻을 :ActiveModel :: MassAssignmentSecurity :: 오류

Can't mass-assign protected attributes: token 
app/models/user.rb:20:in `apply_omniauth' 
app/controllers/authentications_controller.rb:19:in `create' 

을이 사용자 모델 :

class User < ActiveRecord::Base 

    # The relationship between the User and Authentication model 
    has_many :authentications, :dependent => :delete_all 

    # Include default devise modules. Others available are: 
    # :token_authenticatable, :confirmable, 
    # :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    # Setup accessible (or protected) attributes for your model 
    attr_accessible :email, :password, :password_confirmation, :remember_me, 
    # attr_accessible :title, :body 

    def apply_omniauth(auth) 
    # In previous omniauth, 'user_info' was used in place of 'raw_info' 
    self.email = auth['extra']['raw_info']['email'] 
    authentications.build(:provider => auth['provider'], :uid => auth['uid'], :token => auth['credentials']['token']) 
    end 

end 

입니다 내 인증 컨트롤러 :

class AuthenticationsController < ApplicationController 
    def index 
    @authentications = current_user.authentications if current_user 
    end 

    def create 
    auth = request.env["omniauth.auth"] 

    # Try to find authentication first 
    authentication = Authentication.find_by_provider_and_uid(auth['provider'], auth['uid']) 

    if authentication 
     # Authentication found, sign the user in. 
     flash[:notice] = "Signed in successfully." 
     sign_in_and_redirect(:user, authentication.user) 
    else 
     # Authentication not found, thus a new user. 
     user = User.new 
     user.apply_omniauth(auth) 
     if user.save(:validate => false) 
     flash[:notice] = "Account created and signed in successfully." 
     sign_in_and_redirect(:user, user) 
     else 
     flash[:error] = "Error while creating a user account. Please try again." 
     redirect_to root_url 
     end 
    end 
    end 

    def destroy 
    @authentication = Authentication.find(params[:id]) 
    @authentication.destroy 
    redirect_to authentications_url, :notice => "Successfully destroyed authentication." 
    end 
end 

누군가이 오류가 발생하는 이유와 해결 방법을 설명 할 수 있습니까?

답변

1

인증 모델의 attr_accessible 행에 :token을 추가하면 트릭을 수행해야합니다.

+0

아니, 그 dosent 직장 동료. – SHUMAcupcake

+0

다음과 같은 오류가 나타납니다. 알 수없는 속성 : 토큰 – SHUMAcupcake

+0

잘못된 것입니다. 토큰은 인증 모델입니다. –

관련 문제