通过 Facebook 注册身份验证添加 hidden_field

Adding hidden_field through facebook signup authentication

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

下面是我尝试过的示例,即使我的用户 table 没有更新为 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

如果无法从隐藏字段获取数据,那么还有什么方法可以做到这一点?也许我可以使用一个会话,但我真的不明白设计会话是如何工作的,或者我可以在哪里编辑它们以包含它。

我认为您不需要表格。由于您的字段是隐藏的,因此您不希望用户更改它,因此您只需传递一个 link 以向 facebook 授权并将参数添加到您的 URL。

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

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

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

auth.params[:user_type]