我想在我的facebook注册认证中添加一个隐藏字段。我正在使用omniauth
,devise
。我需要找到一种方法来在单击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
吗?如果从隐藏字段获取数据是不可能的,那么我可以采用另一种方式做到这一点?也许我可以使用一个会话,但我真的不明白设计会话的工作方式或我可以编辑它们的地方以包含它。
答案 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]