2014-05-01 191 views
0

我正在使用ROR的示例應用程序。我已經使用has_secure_password在用戶註冊時存儲用戶的密碼。Ruby on rails Facebook登錄has_secure_password

現在我正在使用Omniauth用於facebook登錄。我讀了password_digest不能留空。所以現在我想以與has_secure_password相同的加密格式存儲密碼。我怎樣才能做到這一點?

現在我將密碼硬編碼爲「test」。

sessions_controller.rb

def facebook_login 
     auth_hash = request.env['omniauth.auth'] 
     email=auth_hash.info.email 
     @user_email=User.find_by_email(email) 
      if @user_email 
      render @user_email 
      else  
        @user = User.from_omniauth(env["omniauth.auth"]) 
        redirect_to root_url 
     end 

    end 

user.rb

def self.from_omniauth(auth) 
    where(auth.slice(:outh_provider, :fb_id)).first_or_initialize.tap do |user| 
     user.outh_provider = auth.provider 
     user.fb_id = auth.uid 
     user.name=auth.info.name 
     user.email=auth.info.email 
     user.password_digest="test" 
     user.fb_username = auth.info.name 
     user.oauth_token = auth.credentials.token 
     user.oauth_expires_at = Time.at(auth.credentials.expires_at) 
     user.save!(validate: false) 
    end 
    end 

回答

0

你不直接設置password_digest,你設置的密碼和password_confirmation字段(爲相同的值)然後has_secure_password是否有魔力,並在用戶保存時填充password_digest字段。

+0

謝謝!有效 :) –