Я успешно реализовал oAuth с omniauth-facebook
и omniauth-google
, но у меня возникают трудности с внедрением omniauth-twitter
, так как он не предоставляет адрес электронной почты.Rails Devise Twitter OAuth перенаправить в форму для продолжения oAuth registration
Я искал доступные решения в Интернете, и одно решение указывало на удаление проверки электронной почты Devise, но для моего приложения необходима проверка подлинности электронной почты.
Вместо этого я хочу перенаправить пользователя в новую форму, где пользователю нужно только ввести новый адрес электронной почты, чтобы завершить его регистрацию oAuth, но я не уверен, как связать его с данными oAuth, чтобы завершить регистрацию поскольку я получаю ошибки, когда я отправляю форму, поскольку имя пользователя и пароль не могут быть пустыми, а только электронная почта отображается в этой форме.
CallbackController
def twitter
@user = User.from_omniauth(request.env["omniauth.auth"])
if @user.persisted?
flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Twitter"
sign_in_and_redirect @user, :event => :authentication
else
session["devise.twitter_data"] = request.env["omniauth.auth"].except("extra")
redirect_to twitter_register_path
end
end
twitter_register_path
содержит вид, где пользователь должен заполнить его адрес электронной почты, чтобы завершить регистрацию.
пользователя Модель
def self.from_twitter_omniauth(auth,email)
where(provider: auth["provider"], uid: auth["uid"]).first_or_create do |user|
user.provider = auth["provider"]
user.uid = auth["uid"]
user.email = email
user.name = auth["info"]["name"]
user.password = Devise.friendly_token[0,20]
user.remote_poster_image_url = auth["info"]["image"].gsub('http://','https://')
end
end
Twitter регистрационная форма (twitter_register_path)
<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :email, required: true,label: false %>
</div>
<div class="signup">
<%= f.button :submit, "Sign up",:class =>"register-button" %>
</div>
<% end %>
Даже при том, что Twitter API в последнее время позволяет приложениям запрашивать дополнительные разрешения на их электронную почту, я не уверен, о том, как это реализовать.