zfort / social-auth
Requires
- php: ~7.0
- illuminate/broadcasting: ^5.4
- illuminate/database: ^5.4
- illuminate/events: ^5.4
- illuminate/routing: ^5.4
- illuminate/support: ^5.4
- socialiteproviders/manager: ~2.0 || ~3.0
Requires (Dev)
- mockery/mockery: ^0.9.8
- orchestra/testbench: ^3.4
- phpunit/phpunit: ^5.7
This package is not auto-updated.
Last update: 2022-02-01 13:06:29 UTC
README
此包提供以下功能
- 登录
- 注册
- 将社交网络提供商附加/分离到现有账户
安装
通过Composer
$ composer require zfort/social-auth
现在将服务提供者在config/app.php文件中添加
'providers' => [ // ... ZFort\SocialAuth\SocialAuthServiceProvider::class, ];
您可以使用以下命令发布迁移
$ php artisan vendor:publish --provider="ZFort\SocialAuth\SocialAuthServiceProvider" --tag="migrations"
该包假定您的用户表名为"users"。如果情况不是这样,您应手动编辑已发布的迁移以使用自定义的表名。
在迁移发布后,您可以通过运行迁移来创建用于存储受支持提供商和用户_has_social_provider 辅助表的social_providers表
$ php artisan migrate
您可以使用以下命令发布配置文件
$ php artisan vendor:publish --provider="ZFort\SocialAuth\SocialAuthServiceProvider" --tag="config"
这是已发布config/social-auth.php配置文件的内容
return [ /* |-------------------------------------------------------------------------- | Additional service providers |-------------------------------------------------------------------------- | | The social providers listed here will enable support for additional social | providers which provided by https://socialiteproviders.github.io/ just | add new event listener from the installation guide | */ 'providers' => [ // ], 'models' => [ /* * When using the "UserSocialite" trait from this package, we need to know which * Eloquent model should be used to retrieve your available social providers. Of course, it * is often just the "SocialProvider" model but you may use whatever you like. */ 'social' => \ZFort\SocialAuth\Models\SocialProvider::class, /* * User model which you will use as "SocialAuthenticatable" */ 'user' => \App\User::class, ], 'table_names' => [ /* |-------------------------------------------------------------------------- | Users Table |-------------------------------------------------------------------------- | | The table for storing relation between users and social providers. Also there is | a place for saving "user social network id", "token", "expiresIn" if it exist | */ 'user_has_social_provider' => 'user_has_social_provider', /* |-------------------------------------------------------------------------- | Social Providers Table |-------------------------------------------------------------------------- | | The table that contains all social network providers which your application use. | */ 'social_providers' => 'social_providers' ], 'foreign_keys' => [ /* * The name of the foreign key to the users table. */ 'users' => 'user_id', /* * The name of the foreign key to the socials table */ 'socials' => 'social_id' ], /* |-------------------------------------------------------------------------- | Authentication redirection |-------------------------------------------------------------------------- | | Redirect path after success/error login via social network | */ 'redirect' => '/home' ];
或者,您可以使用以下命令发布和修改视图模板
$ php artisan vendor:publish --provider="ZFort\SocialAuth\SocialAuthServiceProvider" --tag="views"
您还可以使用以下命令发布和修改翻译文件
$ php artisan vendor:publish --provider="ZFort\SocialAuth\SocialAuthServiceProvider" --tag="lang"
将凭证添加到您的项目
文件 .env
FB_ID = <FacebookID> FB_SECRET = <FacebookSecret> FB_REDIRECT = <your.domain>/social/facebook/callback GOOGLE_ID = <GoogleID> GOOGLE_SECRET = <GoogleSecret> GOOGLE_REDIRECT = <your.domain>/social/google/callback GITHUB_ID = <GithubID> GITHUB_SECRET = <GithubSecret> GITHUB_REDIRECT = <your.domain>/social/github/callback
文件 config/services.php
'facebook' => [ 'client_id' => env('FB_ID'), 'client_secret' => env('FB_SECRET'), 'redirect' => env('FB_REDIRECT') ], 'google' => [ 'client_id' => env('GOOGLE_ID'), 'client_secret' => env('GOOGLE_SECRET'), 'redirect' => env('GOOGLE_REDIRECT') ], 'github' => [ 'client_id' => env('GITHUB_ID'), 'client_secret' => env('GITHUB_SECRET'), 'redirect' => env('GITHUB_REDIRECT') ]
之后,在数据库中创建您的社交提供商
SocialProvider::create(['label' => 'Facebook', 'slug' => 'facebook']); SocialProvider::create(['label' => 'Google', 'slug' => 'google']); SocialProvider::create(['label' => 'github', 'slug' => 'Github']);
或者直接添加行
您可以在社交认证请求中添加额外的作用域和参数
SocialProvider::create([ 'label' => 'github', 'slug' => 'Github', 'scopes' => ['foo', 'bar'], 'parameters' => ['foo' => 'bar'] ]);
以覆盖默认作用域
$SocialProvider->setScopes(['foo', 'bar'], true);
将社交按钮添加到您的模板
@include('social-auth::attach') // for authenticated user to attach/detach another socials @include('social-auth::buttons') // for guests to login via
准备您的用户模型
实现SocialAuthenticatable接口
将UserSocialite trait添加到您的User模型
namespace App\Models; use Illuminate\Database\Eloquent\Model; use ZFort\SocialAuth\Traits\UserSocialite; use ZFort\SocialAuth\Contracts\SocialAuthenticatable; class User extends Model implements SocialAuthenticatable { use UserSocialite; ... }
路由
如果您需要自定义社交流程,您应定义自己的控制器并将自定义URL放入路由文件。
例如
Route::get('social/{social}', 'Auth\SocialAuthController@getAccount'); Route::get('social/{social}/callback', 'Auth\SocialAuthController@callback'); Route::get('social/{social}/detach', 'SocialAuthController@deleteAccount');
如果您不需要任何特殊功能,您可以使用我们的默认控制器
为您的项目定制
自定义用户模型
用户模型我们从config('social-auth.models.user')中获取
用户字段映射
包含用于将社交字段映射到用户模型的mapSocialData方法的SocialAuthenticatable接口。如果需要,您可以在UserModel中重新定义此方法以适应您偏好项目
变更日志
请参阅CHANGELOG以获取有关最近更改的更多信息。
测试
$ composer test
贡献
安全
如果您发现任何与安全相关的问题,请通过电子邮件发送至developer@zfort.com,而不是使用问题跟踪器。
致谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。