如何在 laravel 中使用社交名流和护照创建 REST API

Posted

技术标签:

【中文标题】如何在 laravel 中使用社交名流和护照创建 REST API【英文标题】:How to create REST API with socialite and passport in laravel 【发布时间】:2018-05-24 02:15:01 【问题描述】:

我想创建 REST API,它将使用社交(谷歌)登录系统来验证用户进入系统。

我正在使用 laravel auth 和 socialite 进行社交认证 所以我的路线是这样的

Route::group(['middleware'=>'auth:api'], function()
  Route::get('hello','ApiTestControler@index');
);

我正在尝试使用此 url 访问它

http://localhost:8000/api/hello?token=16Wf313JyO66cgXk6UstxsIzrf0hlt8tsP09i04UczkWysHWoveVcHGhUPz6YTdX

我期待它让我登录并显示ApiTestController index methord

但它向我显示了登录页面。 如何解决此问题并使用 API 令牌获取用户身份验证?

更新

用户迁移表

        $table->increments('id');
        $table->string('name')->unique();
        $table->string('first_name')->nullable();
        $table->string('last_name')->nullable();
        $table->string('email')->unique()->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->boolean('activated')->default(false);
        $table->string('token');
        $table->ipAddress('signup_ip_address')->nullable();
        $table->ipAddress('signup_confirmation_ip_address')->nullable();
        $table->ipAddress('signup_sm_ip_address')->nullable();
        $table->ipAddress('admin_ip_address')->nullable();
        $table->ipAddress('updated_ip_address')->nullable();
        $table->ipAddress('deleted_ip_address')->nullable();
        $table->timestamps();
        $table->softDeletes();

以及config\auth.php中的auth配置

'guards' => [
        'web' => [
            'driver'   => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver'   => 'token',
            'provider' => 'users',
        ],
      ]

【问题讨论】:

【参考方案1】:

这里的问题是 Laravel 不知道这是一个 api 调用,它认为它是一个 web 调用。因此,要解决此问题,您需要在标题中添加application/json

Content-Type: application/json

Accept: application/json

只要在标题中添加json 并进行调用,laravel 就会知道这是一个 api 调用!因此它将加载您的 api 控制器。

【讨论】:

那个答案很有帮助。现在我没有按预期登录。但同时它向我展示了Unauthenticated,即使我提供了正确的令牌现在我的网址是这样的http://localhost:8000/api/hello,并且在标题token: TOKEN HERE Content-Type: application/json Accept: application/json 中即使提供了正确的令牌值,它也是相同的Unauthenticated 有什么建议吗?我正在添加我的用户迁移表以便更好地理解 我没有使用 laravel 5.5 默认自带的任何路由组。如果你正在制作rest api,它默认添加api前缀对于身份验证系统,我使用oAuth 2.0'github.com/jeremykenedy/laravel-auth'这是我用作laravel项目的样板 好吧,既然您使用的是 oauth 2.0,那么这不是您所问的另一个问题,嗯,我在您发布的路线上看到了路线分组,所以删除它并尝试查看您是否可以访问!如果是这样,请将我的答案标记为已完成! 如果我删除 api 组,它会抛出 laravel 错误 "exception": "Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException", 你看,laravel 默认将所有路由嵌套在 api.php 中,前缀为 api,所以这是它们的默认值和身份验证你问它使用由命令php artisan make:auth 生成的基本身份验证,抱歉之前评论中的错误 好吧,这肯定是一个身份验证问题,关闭此线程并发布一个新问题!

以上是关于如何在 laravel 中使用社交名流和护照创建 REST API的主要内容,如果未能解决你的问题,请参考以下文章

Laravel JWT 和社交名流插件

如何减少 Laravel 5 中的社交名流范围?

在 laravel 中使用社交名流登录 Facebook

Laravel 社交名流推特

Laravel 社交名流:InvalidStateException(有时)

社交名流 laravel 5.4 Facebook 提供商