2014-12-06 3 views
2

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

Я только начал использовать Фигаро, и единственное изменение, которое я внес в мой код, - это обменять пароль, который я использую для своей учетной записи электронной почты, из файла 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

Возможный дубликат [Ошибки входа в OAuth] (http://stackoverflow.com/questions/27280811/oauth-login-errors) – davidism

+0

В процессе производства вам необходимо передать свои ключи на ваш производственный сервер. Например, с figaro и heroku вы делаете: 'figaro heroku: set -e production' – miler350

+0

Привет, спасибо за подсказку. Я не уверен, где я должен это попробовать? Есть ли строка, которую я должен добавить в свой файл config.action_mailer.smtp_settings в файле production.rb? Спасибо – Mel

ответ

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 

Если вы делаете это, «сохранить» будет пытаться сделать UPDATE с неразрешенным параметром. Правильная версия должна быть чем-то это:

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

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

+0

Привет, Даниэль - у меня нет обновления или сохранения в моем методе отправки электронной почты. У меня есть: def send_admin_mail AdminMailer.new_user_waiting_for_approval (self) .deliver end – Mel

+0

Вы видите что-то, что я должен добавить к этому? Большое спасибо – Mel

+0

и у моей почтовой программы есть: def new_user_waiting_for_approval (пользователь) @user = пользователь mail (to: "[email protected]", от: "[email protected]", вопрос: "Регистрационный запрос # { user.first_name} # {user.last_name} <# {user.mail}> ") end – Mel

2

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

p ENV['your_figaro_key'].to_s 

Смотрите, если это возвращает то, что можно было бы ожидать

+1

Привет Houen - я намеренно установил его как простую строку, когда я пытался избежать каких-либо ограничений с распознаванием символов. Спасибо за подсказку, но это не то, что неправильно для меня. Спасибо, в любом случае. – Mel