我使用设计和自定义表单在我的应用程序中注册用户。用户必须在“注册”之前在此表单中填写一些信息。所以 此自定义表单包含自定义字段(工作种类,价格...)。这些信息。用户成功注册时将存储在“配置文件”中。
我创建了一个自定义注册控制器: 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 " %>
它的工作原理非常好,但我想在结尾添加Facebook登录时添加Omniauth,而不是经典的设计。
所以我添加到视图
<%= 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中一样?),我将松散自定义视图的数据。 我不知道该怎么解决...