Обратный звонок Omniauth

77
10

Я использую устройство с моими рельсами 4 приложения. Я проверяю подлинность с помощью Facebook, LinkedIn и электронной почты.

Я только начал использовать Фигаро, и единственное изменение, которое я внес в мой код, - это заменить пароль, который я использую для своей учетной записи электронной почты, из файла production.rb в файл application.yml.

Теперь, когда я тестирую ссылку регистрации LinkedIn, я получаю сообщение о том, что что-то пошло не так (после нажатия "Регистрация с LinkedIn"). Я получаю ту же ошибку, когда пытаюсь выполнить аутентификацию с другими параметрами.

У меня ошибка обратного вызова в моем контроллере обратного вызова omniauth для linkedin. Линией с проблемой является "@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

Кто-нибудь знает, как разрешить эту ошибку?

большое спасибо

спросил(а) 2021-01-25T17:03:43+03:00 4 месяца, 3 недели назад
1
Решение
76

Вполне возможно, что проблема заключается в текстовом кодировании вашего файла application.yml, особенно если в вашем почтовом пароле есть нестандартные символы. Попробуйте запустить консоль и просто вывести свой пароль, как он выглядит с помощью to_s

p ENV['your_figaro_key'].to_s

Посмотрите, вернет ли это то, что вы ожидаете

ответил(а) 2021-01-25T17:03:43+03:00 4 месяца, 3 недели назад
45

Хм, мне кажется, проблема "сильного параметра". Проверьте свой "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" попытается выполнить UPDATE с недопустимым параметром. Правильная версия должна быть такой:

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

Если я не ошибаюсь, первая реализация работала в предыдущих версиях сильных параметров, но не больше.

ответил(а) 2021-01-25T17:03:43+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема