misstsaal / laravel-vk-mini-apps-auth
为 Laravel 提供的 VK Mini Apps 订阅用户认证包
v1.1.6
2020-09-11 13:21 UTC
Requires
- laravel/framework: >=7
README
安装
composer require mistersaal/laravel-vk-mini-apps-auth
php artisan vendor:publish --provider=Mistersaal\VkMiniAppsAuth\VkMiniAppsAuthServiceProvider
在 .env 文件中添加
VK_SECRET="your_secret_key" VK_TOKEN="your_service_token"
在 config\auth.php 中
- defaults.guard => 'vkMiniApps'
- 在 guards 数组中添加
'vkMiniApps' => [
'driver' => 'vkSign',
'provider' => 'vkUsers',
],
- 在 providers 数组中添加
'vkUsers' => [
'driver' => 'vkMiniApps',
'model' => App\User::class,
],
使用方法
用户必须实现 Mistersaal\VkMiniAppsAuth\VkMiniAppsAuthenticatable 接口。getVkIdFieldName 方法应返回 VK 用户 ID 字段的名称。
现在可以使用中间件 'auth.vk',它将仅允许经过 VK Mini Apps 认证的用户通过(!!! 他不会允许数据库中尚不存在用户通过 !!!)
请将带有签名的 URL 作为每个请求的 'X-Vk-Auth-Url' 标题传递(或者您也可以在 config/vkminiapps.php 中更改它)。axios 的示例
import axios from 'axios'; window.axios = axios; window.axios.defaults.headers.common['X-Vk-Auth-Url'] = window.location.href;
在 auth() 助手或 Auth 门面中,将有一个 getVkIdentifier() 方法可用于获取从 URL 中获得的 vkID。
为了自动注册用户,可以创建以下控制器,它不会被中间件保护
class LoginController extends Controller { /** * @param VkUsersData $vkUsersData Класс для получения пользователя с данными по апи (сами реализуете как вам надо) *@return array */ public function login(VkUsersData $vkUsersData) { //Если подпись верна и пользователь уже есть, то вернет true //Если пользователя нет в базе, то false //Если ошибка подписи, то выбросит VkSignException (можно не отлавливать, пользователь просто получит 500) if (auth()->validate()) { $user = auth()->user(); $vkUsersData->updateUserData($user); $user->save(); return ['success' => true, 'newUser' => false]; } else { $vkId = auth()->getVkIdentifier(); $user = $vkUsersData->getNewUser($vkId); $user->save(); return ['success' => true, 'newUser' => false]; } } }