Я использую устройство и пользовательскую форму для регистрации пользователей в моем приложении.Пользователь должен заполнить некоторые данные в этой форме, прежде чем «зарегистрироваться».Так что эта пользовательская форма содержит настраиваемые поля (вид работы, цена ...).Эти информ.хранятся в «профиле», когда пользователь успешно подписан.
Я создаю пользовательский контроллер регистрации: customregisters_controller.rb
class CustomRegistersController < Devise::RegistrationsController
def new
super do |resource|
@user = resource.build_profile
end
end
def create
super
@profile = Profile.new(user: resource, jobkind: @jobkind, price:
@price ...
@profile.user_id = resource.id
@profile.save
end
end
protected
def after_sign_up_path_for(resource)
sign_in(resource)
end
def sign_up_params
params.require(:user)
.permit(
:fullname, :password, :email, :phone_number,
profile_attributes: [:jobkind, :price])
end
end
И представление CustomRegister: /customregisters/new.html.erb
<%= form_for( resource, as: :user, :html => {class: 'demo-form'}, url: customregisters_path ) do |f| %>
<div> ...
<%= f.fields_for :profile do |p| %>
<%= p.text_field :price %>
<%= p.text_area :jobkind %>
<% end %>
...
# For devise registration with fullname + email / password.. OK
<div class="form-group">
<%= f.text_field :fullname, autofocus: true, placeholder: "FullName", class: "form-control", required:true %>
</div>
<div class="form-group">
<%= f.email_field :email, id:"email", autofocus: true, placeholder: "Email", class: "form-control", required: true %>
</div>
<div class="form-group">
<%= f.password_field :password, autocomplete: "off", placeholder: "Password", class: "form-control", required: true %>
</div>
<%= f.submit "Register", id:"submit_btn", class: "btn btn-normal " %>
Itработает очень хорошо, но я хочу добавить Omniauth с логином Facebook в конце вместо классического устройства.
Поэтому я добавляю в представление
<%= link_to "Register with Facebook",
user_facebook_omniauth_authorize_path, class: "btn btn-facebook btn-
block" %>
Мой OmniauthCallbacksController:
class OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
user = User.from_omniauth(request.env["omniauth.auth"])
if user.persisted?
sign_in user, :event => :authentication
set_flash_message(:notice, :success, :kind => "Facebook") if
is_navigational_format?
#redirect_to ?????
else
session["devise.facebook_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
Когда пользователь нажимает «Зарегистрироваться в FB», я хочу аутентифицировать его, подписывать и создавать профиль с информацией о пользователе, которую он заполнил в пользовательской форме, как моя «классическая» регистрация устройства.
Вопрос: аутентификация с FB работает (и пользователь sign_in), но после этого, как я могу создать профиль (как в моем customregisters_controller?), Я теряю данные пользовательского представления.Я не знаю, как решить эту проблему ...