用户创建Facebook身份验证,在用户提交时添加非Facebook数据

时间:2017-01-11 01:07:41

标签: javascript jquery ruby-on-rails facebook

我的Facebook身份验证工作完美,但我有两种不同的帐户类型:basic-usermember。所以我有两个按钮,用户可以选择basicmember并切换到相应的表单。

问题: 我想知道的是我的facebook按钮如何确定这是member还是basic。我可以在登录的member部分添加什么内容?

第一个想法 - 我的想法是使用Facebook link_to omniauth facebook call and the submit button为隐藏字段创建一个隐藏字段,该字段将给出user_type。给用户创建。

这个^的一个问题是使用hidden_​​field:user_type提交的表单将在facebook omniauth被调用之前先进行。注册路径需要密码,所以我不确定这是否有效。

第二个想法 - 我可以在facebook按钮中存储信息吗?我可以为按钮设置第二个控制器动作,以便在facebook创建我的用户之后,将发生第二个动作,即成员的验证。

或者我可以在facebook按钮中输入一个值来传递给同一个控制器吗?

到目前为止我所拥有的一切!

def self.from_omniauth(auth)

 anonymous_username = "NewUser#{User.last.id + 1}"
 generated_password = Devise.friendly_token[0,20]

 user = User.where(:email => auth.info.email, :username => anonymous_username).first


 if user
  return user
else
  where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
    user.confirmed_at = Time.now
    user.fullname = auth.info.name
    user.provider = auth.provider
    user.uid = auth.uid
    user.username = anonymous_username
    user.email = auth.info.email
    user.password = generated_password
    if auth.info.image.present?
     avatar_url = process_uri(auth.info.image)
     user.avatar = URI.parse(avatar_url)
   end
 end

  end

end

signup

Omniauth Callback_controller:

class OmniauthCallbacksController < Devise::OmniauthCallbacksController


    def facebook
        @user = User.from_omniauth(request.env["omniauth.auth"])

        if @user.persisted?
            sign_in_and_redirect @user, :event => :authentication
            set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format?
        else
            session["devise.facebook_data"] = request.env["omniauth.auth"]
            redirect_to new_user_registration_url

        end
    end

end

Facebook按钮+第一个想法hidden_field

 <%= form_for(@user,  :url=> '/user/action', :method=> 'update', :html => {:id=>'facebook-form'} ) do |f| %>

  <%= link_to "Sign Up With Facebook", user_omniauth_authorize_path(:facebook), :onclick => "$('#facebook-form').submit()", class:"btn btn-primary2" %>

  <% end %>

0 个答案:

没有答案