afzalh/laravel-passport-facebook-login

Laravel Passport 的 Facebook Token 请求授权

2.0.4 2018-12-08 09:23 UTC

README

提供一个新的 Laravel Passport 授权客户端名为 facebook_login,允许您仅使用 Facebook 登录令牌登录用户。

如果电子邮件地址不存在,将创建一个新的用户(可选地分配一个角色 - $user->attachRole(ID))。

安装

使用 composer 安装 composer require afzalh/laravel-passport-facebook-login。使用主要版本 1 以实现 Passport 4 及以下与 Laravel 5.6 的兼容性。

版本

  • 目前仅支持 Laravel 5.6 和 Passport 5.0

依赖关系

  • "laravel/passport": "^5.0"
  • "facebook/graph-sdk": "^5.6"

设置

  • 在您的提供者列表中将 AfzalH\PassportFacebookLogin\FacebookLoginGrantProvider::class 添加到 Laravel\Passport\PassportServiceProvider 之后。
  • AfzalH\PassportFacebookLogin\FacebookLoginTrait 特性添加到您的 User 模型(或您配置与 Passport 一起工作的任何模型)。
  • 运行 php artisan vendor:publish,这将创建一个 config/facebook.php 文件。
  • 在您的 .env 文件中输入您的 Facebook 应用详情:FACEBOOK_APP_IDFACEBOOK_APP_SECRET
  • 可选:要自动将一个角色(https://github.com/Zizaco/entrust)分配给新用户,请使用 'ATTACH_ROLE' 环境设置。

配置

    /*
    |--------------------------------------------------------------------------
    | Application
    |--------------------------------------------------------------------------
    |
    | The facebook ID and secret from the developer's page
    |
    */

    'app' => [
        'id' => env('FACEBOOK_APP_ID'),
        'secret' => env('FACEBOOK_APP_SECRET'),
    ],

    /*
    |--------------------------------------------------------------------------
    | Registration Fields
    |--------------------------------------------------------------------------
    |
    | The name of the fields on the user model that need to be updated,
    | if null, they shall not be updated. (valid for name, first_name, last_name)
    |
    */

    'registration' => [
        'facebook_id' => env('FACEBOOK_ID_COLUMN', 'facebook_id'),
        'email'       => env('EMAIL_COLUMN', 'email'),
        'password'    => env('PASSWORD_COLUMN', 'password'),
        'first_name'  => env('FIRST_NAME_COLUMN', 'first_name'),
        'last_name'   => env('LAST_NAME_COLUMN', 'last_name'),
        'name'        => env('NAME_COLUMN', 'name'),
        'attach_role' => env('ATTACH_ROLE', null),
    ],

如何使用

  • https://your-site.com/oauth/token 发送一个 POST 请求。
  • POST 请求体应包含
    1. grant_type = facebook_login
    2. fb_token = {来自 Facebook 登录的令牌}.
    3. client_id
    4. client_secret
  • 如果成功,将返回一个 access_tokenrefresh_token

假设

  • 您的 User 模型具有以下字段
    • facebook_id
    • namefirst_name & last_name
    • email
    • password

为什么不使用 Laravel 5.5 的自动发现?

我们发现使用自动发现可能会引发问题,因为这个包依赖于 Laravel Passport 在此包之前加载。有时这不会发生,导致问题,因为 Laravel Passport 设置了一个单例,我们引用了它。

我们希望有一天 Laravel 的自动发现将得到修复,以便更好地处理依赖项。

致谢