facebookサインアップ認証に隠しフィールドを追加したいと思います。 Imはomniauth
,devise
を使用しています。 Facebookのサインアップボタンをクリックしたときにフィールドを追加して、ユーザーが基本ユーザーかメンバーかを判断する方法を見つける必要があります。 link_to
では、別のフィールドを追加して、特定のコントローラまたはモデルに渡すことはできますか?facebookサインアップ認証によるhidden_fieldの追加
- 私は、URLが「メンバー」の値でhidden_field
user_type
を追加omniauth(:facebook)
にリンクされてフォームを作ってみました最後の時間。
私のユーザーテーブルが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モデル私はちょうどhidden field
で作られたuser_type
データを見つけることができます
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
- のですか?
resource
を私のフォームに使用する必要がありますか?私のノンフェイスブックカスタムフォームのように私は@user
を使用しますか?
隠しフィールドからデータを取得することができない場合は、私はこれを行うことができます別の方法は何ですか?たぶん私はセッションを使用することができますが、私は実際に討論セッションの仕組みや、これを含むように編集することはできません。
私はこのエラー '未定義のメソッドが' []」nilのために得た:NilClass'これはしかし道よりよい解決策です!私はそれをすることができたことを知りませんでした!エラーについては、そのクラスの原因は? –
オールド..私はこれをいつもやっています。あなたのモデルでomniauthメソッドを呼び出すomniauthコールバックコントローラでは、 'request.env [" omniauth.params "]'でraise/inspectを呼び出してみましょう。どこにどのように格納されているかを調べることができます。 – trh
'RuntimeError({" user_type "=>" member "}):'私は 'raise request.env [" omniauth.params "]。inspect'を入れたときにエラーになります。 –