Omniauth回调

时间:2014-12-06 07:56:24

标签: ruby-on-rails devise linkedin

我正在使用我的rails 4 app设计。我通过Facebook,LinkedIn和电子邮件进行身份验证。

我刚刚开始使用Figaro,我对代码所做的唯一更改是将用于我的电子邮件帐户的密码从production.rb交换到我的application.yml文件中。

现在,当我测试LinkedIn注册链接时,我收到错误消息,指出出现问题(按“注册LinkedIn”后)。当我尝试使用其他选项进行身份验证时,我收到了同样的错误。

我的omniauth回调控制器中有一个回调错误。有问题的一行是下面的'@ user.send_admin_email':

def linkedin
    @user = User.find_for_linkedin_oauth(request.env["omniauth.auth"])
      if @user.persisted?
        @user.send_admin_mail

        redirect_to root_path, :event => :authentication
        # sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated
        #  set_flash_message(:notice, :success, :kind => "LinkedIn") if is_navigational_format?
        else
          session["devise.linkedin_data"] = request.env["omniauth.auth"]
          redirect_to root_path
        end
      end

我有一个邮件程序设置,它会向我发送一封电子邮件,告诉我何时有新注册。它使用我将密码从production.rb移动到application.yml

的电子邮件地址

有谁知道如何解决此错误?

非常感谢

2 个答案:

答案 0 :(得分:2)

问题可能是application.yml文件的文本编码,特别是如果您的电子邮件密码中包含非标准字符。尝试启动控制台,只需输出密码,因为它看起来像to_s

p ENV['your_figaro_key'].to_s

看看是否会返回您期望的内容

答案 1 :(得分:0)

嗯,这对我来说似乎是一个“强参数”问题。检查“send_admin_mail”以查看是否存在“update_atributes”(或“保存”)。

我的猜测是你的user.rb是这样的:

class User < ActiveRecord::Base
...
attr_accessor :extras

def self.find_for_linkedin_oauth(access_token, signed_in_resource=nil)
  ...
  user = User.where(...)
  ...
  user.extras = access_token.extras
  ...
end

def send_admin_mail
  ...
  self.update_attributes(some_attribute: extras["some_attribute"])
  ...
end

如果您这样做,“save”将尝试使用非允许参数进行更新。正确的版本必须是这样的:

self.update_attributes(some_attribute: extras.permit(:some_attribute))

如果我没错,第一个实现工作在先前版本的强参数中,但现在不再存在。