5

在 Laracast (Laravel 5.0 - Socialite)上使用本教程,特别是在12.11 分钟之前,我已经成功设置了所有内容。但是,我使用的是 Laravel 5.1

  • 定义了我的路由,但当前注释掉了回调提供程序,因为我只是试图通过获取的令牌获取用户详细信息:

    Route::get('auth/facebook', 'Auth\AuthController@redirectToProvider');
    //Route::get('auth/facebook/aaa', 'Auth\AuthController@handleProviderCallback');
    
  • 增加的必需品config>services.php

    'facebook' => [
     'client_id' => '##',
     'client_secret' => env('FB_SECRET_ID'),
     'redirect' => 'http://laratest.dev/auth/facebook',   
    ],
    

我决定暂时返回同一页面 ( auth/facebook)。这就是为什么我将回报设置domain.devv/auth/facebook为测试。

  • 在我的AuthController.php,我设置:

    public function redirectToProvider(AuthenticateUser $authenticateUser, Request $request)
     {  
       return $authenticateUser->execute($request->has('code'));
     }
    
  • 最后,在我的AuthenticateUser.php

    use Illuminate\Contracts\Auth\Guard;  (PS. I changed Authenticator to Guard)
    
       class AuthenticateUser {
          private $users;
          private $socialite;
          private $auth;
    
    public function __construct(UserRepository $users, Socialite $socialite, Guard $auth)
     {
         $this->users = $users;
         $this->socialite = $socialite;
         $this->auth = $auth;
     } 
    
    public function execute($hasCode)
     {   
       // dd($hasCode) *First dd
    
      if ( ! $hasCode) return $this->getAuthorizationFirst();
    
      // $user = $this->socialite->driver('facebook')->user();
    
      // dd($hasCode) *Second dd
      // dd($user) *Third dd
     }
    
    private function getAuthorizationFirst()
     {
       return $this->socialite->driver('facebook')
         ->scopes(['public_profile', 'email'])->redirect();
     } 
    }
    

现在,我单击Login with Facebook链接并被定向到domain.dev/auth/facebook?code=943299043290...

当我只使用*First dd(所有其他注释行都被注释)时,它返回false.

当我使用唯一的*Second dd(带有注释行$user = $this->socialite->driver('facebook')->user();)时,它返回true.

所以一切都很完美,并且通过execute(),然后通过getAuthorizationFirst()。最后,返回execute()同样包含在链接 ( domain.dev/auth/facebook?code=943299043290...) 中的已获取令牌。


我的问题出现在这里:

在我取消注释的那$user = $this->socialite->driver('facebook')->user();一刻,我收到一个错误:

Middleware.php 第 69 行中的 ClientException:客户端错误:400

1. 在 /Applications/MAMP/htdocs/laratest/vendor/guzzlehttp/guzzle/src/Middleware.php 第 69 行

2. 在 Promise.php 第 199 行的 Middleware::GuzzleHttp{closure}(object(Response))

3. 在 Promise.php 第 152 行中的 Promise::callHandler('1', object(Response), array(object(Promise), object(Closure), null))

4. 在 TaskQueue.php 第 60 行中的 Promise::GuzzleHttp\Promise{closure}()

5.在CurlMultiHandler.php第96行的TaskQueue->run()

由于某些原因,这条线 ( $user = $this->socialite->driver('facebook')->user();)对我不起作用(虽然它在教程中起作用(分钟 12.11 用于 15 秒的简要说明)。

每当我使用$user = $this->socialite->driver('facebook')->user();时,我都会收到错误ClientException in Middleware.php line 69: Client error: 400,当然,我无法得到dd($user).

补充一点,当我看到 ClientException 错误时,链接仍然带有代码:(domain.dev/auth/facebook?code=943299043290...

4

1 回答 1

2

我也遇到了这个问题,在我的情况下,我必须在域字段的 config/session.php 中添加我的域,并将它也添加到我的应用程序提供程序中

于 2015-09-08T16:01:00.860 回答