通过facebook注册身份验证添加hidden_​​field

时间:2017-01-13 23:52:06

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

我想在我的facebook注册认证中添加一个隐藏字段。我正在使用omniauthdevise。我需要找到一种方法来在单击facebook注册按钮时添加字段,以确定用户是基本用户还是成员。在link_to我可以添加另一个字段,这会传递给某个控制器或模型吗?

  • 上次我尝试制作一个表单,其中的网址是omniauth(:facebook)的链接,其中添加了一个隐藏字段user_type,其值为"成员"。

下面是我尝试过的示例,即使我的用户表未使用member或' basic-user'进行更新。

<%= form_for(resource, :url => user_omniauth_authorize_path(:facebook)) do |h| %>  

  <%= h.hidden_field :user_type, value: 'member' %>
  <%= h.submit "Sign Up With Facebook", class:"btn btn-primary2" %>

 <% end %>

这是我的user.rb模型

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).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.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

 user.update_attributes username: "NewUser#{user.id}"

  end
end
  • 在哪里可以找到我刚用user_type生成的hidden field数据?
  • 我应该在我的表单中使用resource,就像我的非Facebook自定义表单一样,或者我应该使用@user吗?

如果从隐藏字段获取数据是不可能的,那么我可以采用另一种方式做到这一点?也许我可以使用一个会话,但我真的不明白设计会话的工作方式或我可以编辑它们的地方以包含它。

1 个答案:

答案 0 :(得分:1)

我认为你不需要表格。由于您的字段是隐藏的,因此您不希望用户更改它,因此您只需传递一个链接以通过facebook进行授权并将params添加到您的URL。

<%= link_to "Sign Up With Facebook", omniauth_authorize_path(:user, :facebook, user_type: 'member') %>

然后在背面,当他们发回数据时,它在auth哈希中可用。

在您的模型中,您可以使用auth.options重新获取数据:

auth.params[:user_type]