efureev / social
此包的最新版本(v1.3.0)没有可用的许可证信息。
v1.3.0
2020-01-14 05:17 UTC
Requires
- efureev/socialite: ^1.1
- efureev/support: ^2.3
- illuminate/database: ^5.8|^6.2|^7.0
- illuminate/routing: ^5.8|^6.2|^7.0
Requires (Dev)
- orchestra/testbench: ^4.4
- phpstan/phpstan: ^0.12
- phpunit/phpunit: ~8.5
README
信息
Laravel Socialite的包装器
安装
composer require efureev/social
- 运行迁移:
./artisan migrate
。 - 如果需要,发布配置:
./artisan vendor:publish --tag=social
。
基本用法
- 已发布资源:
php artisan vendor:publish --tag=social
- 将配置文件
social.php
填充到config
目录中,包含您的社交驱动程序
<?php return [ 'drivers' => [ 'vk' => [ 'clientId' => env('VK_CLIENT_ID'), 'clientSecret' => env('VK_CLIENT_SECRET'), ], 'github' => [ // ... ], // ... ], ];
- 将变量添加到您的应用
.env
文件中:VK_CLIENT_ID=...
和VK_CLIENT_SECRET=...
,使用VK凭证。请参阅https://vk.com/apps?act=manage
- 运行迁移:
php artisan migration
- 添加到视图中(例如:
resources/views/auth/login.blade.php
)- 列表:
@include('social::list', ['socials' => app('social')->getProviders()])
- 图标:
@include('social::icons', ['socials' => app('social')->getProviders()])
- 列表:
- 完成!
要自定义,请参阅配置和文档。
配置
配置属性
redirectOnAuth
[字符串] 用户认证后重定向的地址。onSuccess
[\Closure|array] 认证成功时的操作。参数:\Fureev\Socialite\Two\AbstractProviderdrivers
[数组] 驱动程序列表 (driverName => driverConfig
)userClass
[字符串] 认证用户类 (userClass => 'App/Models/User'
)
驱动程序配置
clientId
[字符串] 需要clientSecret
[字符串] 需要enabled
[布尔] 默认,true。label
[字符串] 视图中的标题。默认,driverName
provider
[字符串] 提供者类 (\Fureev\Socialite\Two\AbstractProvider)url_token
[字符串] 提供者的令牌URLurl_auth
[字符串] 提供者的认证URLuserInfoUrl
[字符串] 获取原始用户数据的URLonSuccess
[\Closure|array] 认证成功时的操作。覆盖通用onSuccess
scopeSeparator
[字符串]scopes
[数组]
示例
文件 config/social.php
<?php return [ 'onSuccess' => function ($driver) { $user = \Fureev\Social\Services\SocialAccountService::setOrGetUser($driver); return \Fureev\Social\Services\SocialAccountService::auth($user); }, //'onSuccess' => [\App\Http\Controllers\IndexController::class, 'index'], 'drivers' => [ 'gitlab' => [ 'enabled' => false, 'provider' => \Fureev\Socialite\Two\GitlabProvider::class, // 'enabled' => false, 'label' => '<i class="fab fa-gitlab"></i>' ], 'vk' => [ // 'enabled' => false, 'label' => '<i class="fab fa-vk"></i>', 'clientId' => env('VK_CLIENT_ID'), 'clientSecret' => env('VK_CLIENT_SECRET'), ], 'github' => [ 'enabled' => false, 'label' => '<i class="fab fa-github-alt"></i>' ], 'custom_auth' => [ 'clientId' => env('SOCIAL_AUTH_CLIENT_ID'), 'clientSecret' => env('SOCIAL_AUTH_CLIENT_SECRET'), 'url_auth' => 'http://api.auth.x/auth/authorize', 'url_token' => 'http://api.auth.x/auth/token', 'userInfoUrl' => 'http://api.auth.x/users/info', 'scopeSeparator' => ',', 'scopes' => ['name','email','photo'], 'tokenFieldsExtra' => [ 'grant_type' => 'authorization_code', ], 'mapFields' => [ 'id' => 'id', 'name' => ['profile.first_name.v', new \Fureev\Socialite\Separator, 'profile.last_name.v'], 'email' => 'profile.email.v', 'avatar' => 'photo', 'nickname' => 'id', 'profileId' => 'profileId', ], 'guzzle' => [ 'query' => [ 'prettyPrint' => 'false', ], 'headers' => [ 'Accept' => 'application/json', 'Authorization' => 'Bearer {{%TOKEN%}}', ], ], ], 'google' => [ // 'enabled' => false, 'clientId' => env('G+_CLIENT_ID'), 'clientSecret' => env('G+_CLIENT_SECRET'), 'url_token' => 'https://#/o/oauth2/token', 'url_auth' => 'https://#/o/oauth2/auth', 'userInfoUrl' => 'https://www.googleapis.com/plus/v1/people/me?', 'label' => '<i class="fab fa-google"></i>', // 'onSuccess' => [\App\Http\Controllers\HomeController::class, 'index'], 'scopeSeparator' => ' ', 'scopes' => ['openid', 'profile', 'email',], 'tokenFieldsExtra' => [ 'grant_type' => 'authorization_code' ], 'mapFields' => [ 'id' => 'id', 'name' => 'displayName', 'email' => 'emails.0.value', 'avatar' => 'image.url', ], 'guzzle' => [ 'query' => [ 'prettyPrint' => 'false', ], 'headers' => [ 'Accept' => 'application/json', 'Authorization' => 'Bearer {{%TOKEN%}}', ], ] ] ] ];
文件 \App\Services\SocialAccountService.php
<?php use Fureev\Socialite\Contracts\Provider as ProviderContract; class SocialAccountService { public static function setOrGetUser(ProviderContract $provider) { $providerUser = $provider->user(); $providerName = $provider->getName(); //... } }
在您的视图中自动添加社交提供者
@extends('layouts.login') @section('content') <form method="POST" action="{{ route('login') }}"> @csrf <div class="input-group"> <input type="text" name="email" id="email" class="input-text" autocomplete="email" spellcheck="false" required autofocus value="{{ old('email') }}"><i class="ig-helpers"></i> <label for="email" class="input-label">E-mail</label> </div> <div class="input-group"> <input type="password" name="password" id="password" autocomplete="password" class="input-text" required><i class="ig-helpers"></i> <label class="input-label" for="password">Пароль</label> </div> <div class="buttons"> <button class="btn-rnd" type="submit"><i class="fas fa-sign-in-alt"></i></button> <a href="{{ route('password.request') }}" title="забыли пароль?"><i class="far fa-question-circle"></i></a> </div> @include('social::icons', ['socials' => app('social')->getProviders()]) // or @include('social::list', ['socials' => app('social')->getProviders()]) </form> @endsection