通过 Facebook 注册身份验证添加 hidden_field
Adding hidden_field through facebook signup authentication
我想在我的 Facebook 注册身份验证中添加一个隐藏字段。我正在使用 omniauth
、devise
。我需要找到一种方法来在单击 facebook 注册按钮时添加一个字段以确定用户是基本用户还是会员。在 link_to
上,我可以添加另一个字段吗?这会传递给某个控制器或模型吗?
- 上次我尝试制作一个表单,其中 url 是 link 到
omniauth(:facebook)
添加一个 hidden_field user_type
的值为 "member".
下面是我尝试过的示例,即使我的用户 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
- 我在哪里可以找到我刚用
hidden field
制作的 user_type
数据?
- 我应该像我的非 Facebook 自定义表单一样在我的表单中使用
resource
还是应该使用 @user
?
如果无法从隐藏字段获取数据,那么还有什么方法可以做到这一点?也许我可以使用一个会话,但我真的不明白设计会话是如何工作的,或者我可以在哪里编辑它们以包含它。
我认为您不需要表格。由于您的字段是隐藏的,因此您不希望用户更改它,因此您只需传递一个 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]
我想在我的 Facebook 注册身份验证中添加一个隐藏字段。我正在使用 omniauth
、devise
。我需要找到一种方法来在单击 facebook 注册按钮时添加一个字段以确定用户是基本用户还是会员。在 link_to
上,我可以添加另一个字段吗?这会传递给某个控制器或模型吗?
- 上次我尝试制作一个表单,其中 url 是 link 到
omniauth(:facebook)
添加一个 hidden_fielduser_type
的值为 "member".
下面是我尝试过的示例,即使我的用户 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
- 我在哪里可以找到我刚用
hidden field
制作的user_type
数据? - 我应该像我的非 Facebook 自定义表单一样在我的表单中使用
resource
还是应该使用@user
?
如果无法从隐藏字段获取数据,那么还有什么方法可以做到这一点?也许我可以使用一个会话,但我真的不明白设计会话是如何工作的,或者我可以在哪里编辑它们以包含它。
我认为您不需要表格。由于您的字段是隐藏的,因此您不希望用户更改它,因此您只需传递一个 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]