【问题标题】:Omniauth Session NoMethodErrorOmniauth 会话 NoMethodError
【发布时间】:2014-03-03 04:25:26
【问题描述】:

我正在开发一个允许用户使用omniauth 通过facebook/twitter/linkedin 登录的rails 应用程序。到目前为止,用户可以使用身份验证注册和创建帐户,但他们必须通过验证,因此被转发到注册页面,他们必须在其中输入有效的姓名、用户名和电子邮件。如果可能的话,我希望使用 request.env["omniauth.auth"] 哈希来填写这些字段。

这是我的代码:

authentications_controller.rb

user = User.new 
user.apply_omniauth(omniauth)

if user.save
  flash[:notice] = "Signed in successfully."
  sign_in_and_redirect(:user, user)
else 
  session[:omniauth] = omniauth.except('extra')
  redirect_to new_user_registration_url
end

registrations_controller.rb:

def build_resource(*args)
  super
  if session[:omniauth]
    @user.apply_omniauth(session[:omniauth])
    @user.valid?
  end
 end

user.rb:

def apply_omniauth(omniauth)
  self.name = omniauth['user_info']['name'] if name.blank?
  self.email = omniauth['user_info']['email'] if email.blank?
  authentications.build(:provider => omniauth['provider'], :uid => omniauth['uid'])
end

行:

self.email = omniauth['user_info']['email'] if email.blank?

导致此 NoMethodError:

undefined method `[]' for nil:NilClass

会话[:omniauth] 正在apply_omniauth 方法中从注册控制器传递到omniauth。如何访问此会话中的姓名和电子邮件?

谢谢

【问题讨论】:

  • 当他们发布 omniauth 1.0 时,他们将 auth['user_info'] 更改为仅 auth['info'] - 一个方便的信息,用于了解您是否正在升级 gem 版本...跨度>

标签: ruby-on-rails session hash omniauth


【解决方案1】:
  1. 快速回答:

    omniauth.info.email # which is the same as omniauth['info']['email']
    
  2. 解释性答案:

    将此作为回调控制器的第一行:

    render :text => "<pre>" + env["omniauth.auth"].to_yaml and return    
    

    现在尝试登录,您将能够仔细查看返回的嵌套散列的散列。

【讨论】:

  • 先谢谢!对于解释性答案,我们应该在哪里添加那行代码?
  • 您肯定有一个SessionsControllerAuthenticationsController 接收来自facebook 或twitter 或其他什么的回调。通常,调用的动作是create 动作,对吗?您所要做的就是将该行代码放在create 操作的开头。
  • 当我在 AuthenticationsController 的 create 方法的开头添加该代码时,出现“RuntimeError in AuthenticationsController#create”:/
  • 是的,这就是重点。 raise 的目的是创建一个错误。在这种情况下,请使用请求的内容创建一个错误。
  • 我很确定您使用的是旧教程。按照这个答案:stackoverflow.com/a/11097308/1160916
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-28
  • 2017-02-27
相关资源
最近更新 更多