我正在使用我的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
的电子邮件地址有谁知道如何解决此错误?
非常感谢
答案 0 :(得分:2)
问题可能是application.yml文件的文本编码,特别是如果您的电子邮件密码中包含非标准字符。尝试启动控制台,只需输出密码,因为它看起来像to_s
p ENV['your_figaro_key'].to_s
看看是否会返回您期望的内容
答案 1 :(得分:0)
我的猜测是你的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))
如果我没错,第一个实现工作在先前版本的强参数中,但现在不再存在。