3

ユーザーが Twitter を使用してサインアップできるシステムを作成しようとしています。私はこのチュートリアルに従っていました:

http://www.orhancancylan.com/rails-twitter-and-facebook-authentications-with-omniauth-and-devise/

今、私は Twitter のコールバック アクションで立ち往生しています。認証が既に存在するかどうか、およびユーザーが既にログに記録されていて、このメソッドが正常に機能するかどうかを確認しました。現在、認証とユーザーの両方を作成する必要がある「新しいユーザー」アクションを作成しています。

ユーザーに「Twitterでログイン」ボタンをクリックしてもらいたいのですが、スクリプトはTwitterのコールバックから名前、ユーザー名、バイオ、場所を取得する必要があります。次に、ユーザーは「第 2 段階のページ」にリダイレクトされ、登録を完了するために電子メールとパスワードを入力する必要があります。

私の認証コントローラーでは、これを書きました:

  user = User.new

  user.name = omni['info'].name
  user.username = omni['info'].nickname
  user.location = omni['info'].location
  user.bio = omni['info'].description

  user.apply_omniauth omni
  user.avatar_from_url omni['info'].image

  session[:omniauth] = omni.except('extra')

  #What should I do here?

new_user_registration_pathチュートリアルにあるようにリダイレクトしようとしましたが、元のサインアップフォームが表示されます。電子メールとパスワードのフィールドのみを含む別のビューを作成しましたが、大きな問題は次のとおりです。

Twitter ユーザーの情報を取得し、このデータをcreateDevise コントローラーのメソッドに渡すにはどうすればよいですか?

4

3 に答える 3

1

@khanh の答えは少し間違っています: コメントするのに十分な評判がないので、ここに投稿します。申し訳ありません

uidはその方法(@khanh)で取得できますが、ニックネームはこの方法である必要があります

puts env['omniauth.auth']['info']['name']

['info'] ハッシュには以下が含まれます。

  • description
  • email(これはnilツイッターにあります)、
  • image(プロフィール画像リンク)、
  • location
  • name(ツイッターのユーザー名)、
  • nickname(@ユーザー名)、
  • urls(URL のハッシュ)。

全体['omniauth.auth']は次のようになります。

#<OmniAuth::AuthHash 
   credentials=#<OmniAuth::AuthHash
                  secret="some-secret-xxxxxxxxxxxxxxxxxxxxxx"
                  token="some-token-xxxxxxxxxxxxxxxxxxxxxx"
   >
   extra=#<OmniAuth::AuthHash 
            access_token=#<OAuth::AccessToken:0x0055cab742d2b8 
                            @token="some-token-xxxxxxxxxxxxxxxxxxxxxx", 
                            @secret="some-secret-xxxxxxxxxxxxxxxxxxxxxx", 
                            @consumer=#<OAuth::Consumer:0x0055cab760ba58 
                                          @key="some-consumer-key-xxxxxxxxxxxxxx", 
                                          @secret="some-consumer-secret-xxxxxxxxxxxxxx", 
                                          @options={
                                            :signature_method=>"HMAC-SHA1", 
                                            :request_token_path=>"/oauth/request_token", 
                                            :authorize_path=>"/oauth/authenticate", 
                                            :access_token_path=>"/oauth/access_token", 
                                            :proxy=>nil, 
                                            :scheme=>:header, 
                                            :http_method=>:post, 
                                            :oauth_version=>"1.0", 
                                            :site=>"https://api.twitter.com"
                                          }, 
                                          @http=#<Net::HTTP api.twitter.com:443 open=false>, 
                                          @http_method=:post, 
                                          @uri=#<URI::HTTPS https://api.twitter.com>
                            >, 
                            @params={
                              :oauth_token=>"some-token-xxxxxxxxxxxxxxxxxxxxxx", 
                              "oauth_token"=>"some-token-xxxxxxxxxxxxxxxxxxxxxx", 
                              :oauth_token_secret=>"some-secret-xxxxxxxxxxxxxxxxxxxxxx", 
                              "oauth_token_secret"=>"some-secret-xxxxxxxxxxxxxxxxxxxxxx", 
                              :user_id=>"000000000", 
                              "user_id"=>"000000000", 
                              :screen_name=>"sample_user", 
                              "screen_name"=>"sample_user", 
                              :x_auth_expires=>"0", 
                              "x_auth_expires"=>"0"
                            }, 
                            @response=#<Net::HTTPOK 200 OK readbody=true>
            > 
            raw_info=#<OmniAuth::AuthHash 
                        contributors_enabled=false 
                        created_at="Fri Sep 02 23:56:11 +0000 2011" 
                        default_profile=false 
                        default_profile_image=false 
                        description="Hi my name is Sample and I'm a Twitter user." 
                        entities=#<OmniAuth::AuthHash 
                                    description=#<OmniAuth::AuthHash 
                                                    urls=[]
                                    > 
                                    url=#<OmniAuth::AuthHash 
                                            urls=[
                                              #<OmniAuth::AuthHash 
                                                 display_url="link.to/my/blog_or_someth…" 
                                                 expanded_url="http://link.to/my/blog_or_something.html" 
                                                 indices=[0, 23] 
                                                 url="https://t.co/SAMPLE007"
                                              >
                                            ]
                                    >
                        > 
                        favourites_count=690
                        follow_request_sent=false 
                        followers_count=42
                        following=false 
                        friends_count=34 
                        geo_enabled=false 
                        has_extended_profile=false 
                        id=000000000 
                        id_str="000000000" 
                        is_translation_enabled=false 
                        is_translator=false 
                        lang="ja" 
                        listed_count=24 
                        location="Tokyo, Japan" 
                        name="Sample user" 
                        notifications=false 
                        profile_background_color="DBE9ED" 
                        profile_background_image_url="http://abs.twimg.com/images/themes/theme17/bg.gif" 
                        profile_background_image_url_https="https://abs.twimg.com/images/themes/theme17/bg.gif" 
                        profile_background_tile=false 
                        profile_banner_url="https://pbs.twimg.com/profile_banners/0000000000/00000000000" 
                        profile_image_url="http://pbs.twimg.com/profile_images/010101010101010101/LeoGT5Xu_normal.png" 
                        profile_image_url_https="https://pbs.twimg.com/profile_images/010101010101010101/LeoGT5Xu_normal.png" 
                        profile_link_color="CC3366" 
                        profile_sidebar_border_color="DBE9ED" 
                        profile_sidebar_fill_color="E6F6F9" 
                        profile_text_color="333333" 
                        profile_use_background_image=true 
                        protected=false 
                        screen_name="sample_user" 
                        statuses_count=61468 
                        time_zone="Tokyo" 
                        url="https://t.co/SAMPLE007" 
                        utc_offset=32400 
                        verified=false
            >
  >
  info=#<OmniAuth::AuthHash::InfoHash
          description="Hi my name is Sample and I'm a Twitter user."
          email=nil
          image="http://pbs.twimg.com/profile_images/010101010101010101/LeoGT5Xu_normal.png"
          location="Tokyo, Japan"
          name="Sample User"
          nickname="sample_user"
          urls=#<OmniAuth::AuthHash
                  Twitter="https://twitter.com/sample_user"
                  Website="https://t.co/SAMPLE007">
  > 
  provider="twitter"
  uid="000000000"
>

からユーザー名を取得できます

env['omniauth.auth']['extra']['raw_info']['name']
env['omniauth.auth']['extra']['raw_info']['screen_name']

それも。(from['info']['raw_info']) のどちらがよいかわかりません。しかし['raw_info']、前者よりも多くの情報を提供してくれるようです。


編集: そうそうそう、それはすべて wiki に書かれていました!

認証ハッシュスキーマ - intridea/omniauth Wiki | ギットハブ

しかし、Twitter には具体的な事例がないので、私の回答が役に立つかもしれません。:)

于 2016-01-23T12:18:50.160 に答える