Rails通过自定义注册表格设计和全方位认证Facebook

时间:2019-03-15 13:30:24

标签: ruby-on-rails devise omniauth-facebook

我使用设计和自定义表单在我的应用程序中注册用户。用户必须在“注册”之前在此表单中填写一些信息。所以 此自定义表单包含自定义字段(工作种类,价格...)。这些信息。用户成功注册时将存储在“配置文件”中。

我创建了一个自定义注册控制器:     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中一样?),我将松散自定义视图的数据。 我不知道该怎么解决...

0 个答案:

没有答案