3

Google oauth 認証を処理するために、 HWIOAuthBundleを使用して Symfony2.1 をセットアップしようとしています。

バンドルの説明にある手動の指示に従いましたが、まだ何かが不足しています。認証されたユーザーを必要とするアクションにアクセスすると (または単に url /connect/google と入力すると)、Google 認証ページにリダイレクトされます - この部分は機能しています。しかし、リダイレクト後 (Google にログインし、データの共有に同意した後)、DB に新しいユーザーが作成されず、接続/失敗アクションにリダイレクトされます。Google 認証は、ユーザーを認証する 1 つの方法にすぎません。何が間違っている可能性がありますか?

これは私のルーティングです:

hwi_oauth_redirect:
    resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml"
    prefix:   /connect

google_login:
    pattern: /login/check-google

security.yml

firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false

    secured_area:
        pattern:    ^/
        form_login:
            provider: fos_userbundle
            login_path: /connect/google
            check_path: /login/login_check
        logout: true
        anonymous: true
        oauth:
            resource_owners:
                google: "/login/check-google"
            login_path:        /connect/google
            failure_path:      /connect-fail
            # FOSUB integration
            oauth_user_provider:
                service: hwi_oauth.user.provider.fosub_bridge

と構成

hwi_oauth:
    firewall_name: secured_area
    resource_owners:
            google:
                type:                google
                client_id:           ....
                client_secret:       ......
                scope:               "https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile"
    fosub:
        username_iterations: 5
        properties:
            google: googleId

Google リダイレクト URL

http://xxxx/login/check-google

私のユーザーエンティティ:

class User extends BaseUser
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var integer $id
     *
     * @ORM\Column(name="google_id", type="integer")
     */ 
    protected $googleId;

//編集 - 更新

Symfony
のログで、Google リダイレクトからの リクエストが 1 つあることがわかりました。google_id SELECT * FROM app_user t0 WHERE t0.googleId = に基づいて、データベースからユーザーを取得しようとしただけです。LIMIT 1 : ['123456789'] しかし、そのユーザーは存在しません。

認証を試みる前にユーザーを作成する必要がありますか?

4

2 に答える 2

6

beliveyourdreamが言うように... HWIOAuthは自動ユーザー登録を提供しません。独自のユーザー プロバイダーを作成し、それを使用する必要があります。FOSUserBundle を使用することをお勧めします。FOSUserBundleがほとんどの作業を行い、HWIOAuth にうまく統合されているからです。設定方法(接続に手間がかかるので)はこちらのGistをご利用ください。プロバイダー (gacebook、google、github など) からのデータを使用したユーザー登録とアカウント接続 (既に登録されているユーザーは、自分のアカウントをプロバイダーからのアカウントに接続できます) の両方でアプリケーションをセットアップします。また、作成/接続時に、ユーザーはプロバイダーの資格情報を使用してサイトに接続できます (うーん... 結局、OAuth です)。

于 2013-01-20T12:32:15.870 に答える
4

残念ながら、HWIOAuthBundle はデフォルトでは自動登録を処理しません。今すぐログインする場合は、ユーザーを手動で作成する必要があります。

于 2012-09-19T09:25:52.407 に答える