alexespinola/login-cuentas

对账户系统的Oauth2认证

1.0.0 2021-06-13 14:54 UTC

This package is auto-updated.

Last update: 2024-09-13 22:08:44 UTC


README

img

LoginCuentas

Latest Stable Version License

loginCuentas 是一个允许您将Laravel的认证集成到阿根廷Trenes的账户系统的库。

此库生成所有必要的路由、视图、控制器等,用于认证过程,因此您不应使用Laravel提供的命令 php artisan make:auth

除了解决认证过程外,此库还提供

  • 用户管理的图形界面
  • 两个中间件,"CheckToken" 和 "RefreshToken"

内部使用 "league/oauth2-client" 包通过Oauth2认证协议

要求

  • PHP: ^7.2
  • laravel: ^7
  • composer
  • 在您的应用数据库中必须存在名为 users 的表,包含字段 idnameemail(Laravel 默认包含并生成于执行 php artisan migrate 命令时)

安装

composer require alexespinola/login-cuentas

配置

在您的应用 .env 文件中定义认证凭据

  • clientId=<clientId>
  • clientSecret=<clientId>
  • redirectUri=http://<path-to-your-proyect>/authorize

可选地,您也可以定义

  • urlAuthorize=https://cuenta.sofse.gob.ar/oauth2/authorize/
  • urlAccessToken=https://cuenta.sofse.gob.ar/oauth2/token/
  • urlResourceOwnerDetails=https://cuenta.sofse.gob.ar/api/user/
  • urlApiCuentas=https://cuenta.sofse.gob.ar/api/
配置文件

使用以下命令发布此库的配置

php artisan vendor:publish --provider="loginCuentas\LoginCuentasServiceProvider" --tag="config"

这将在您的应用中创建一个配置文件: config/loginCuentas.php 在此文件中,您可以定义

  • 登录后重定向到的URL 'urlRedirectAfterLogin'
  • 显示用户视图的URL urlShowUser
  • 编辑用户视图的URL urlEditUser

此库不实现编辑或查看用户详情的功能。您必须在您的应用中创建一个 userController 来执行这些任务,以及相应的视图和路由。

中间件

此库提供两个中间件: RefreshToken:用于在令牌过期时自动续订用户令牌。CheckToken:用于通过 "Authorization" 标头认证向您的应用公开的API的请求。

您可以在路由组中或控制器构造函数中使用这些中间件。

在路由组中;
Route::group(['middleware' => ['RefreshToken']], function() {
  Route::get('/home', function () {
    return view('home');
  });
  ...
});
在控制器构造函数中;
public function __construct() {
    $this->middleware('CheckToken');
}
UserWasLogged 事件

您可能需要在用户登录到您的应用时执行某些操作,例如

  • 将用户的权限保存到会话变量中
  • 记录应用的访问

为此,LoginCuentas 库发出一个 UserWasLogged 事件,以便您可以在应用中注册一个监听器来监听该事件并执行所需的操作。

实现监听器的说明

1- 创建一个名为 App\Listeners\afterUserLogged.php 的监听器,按照以下示例编码,并在 handle 方法中编写所需的操作。注意,变量 $event->userID 包含登录用户的 ID。

<?php

namespace App\Listeners;

use loginCuentas\Events\UserWasLogged;
use App\User;
use Session;

class afterUserLogged
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct() {
      
    }

    /**
     * Handle the event.
     *
     * @param  \App\Events\UserWasLogged  $event
     * @return void
     */
    public function handle(UserWasLogged $event)
    {
        //COMO EJEMPLO: define una variable de sección con los datos del usuario
        $user = User::find($event->userID)->toJson();
        Session::put('user', $user);
    }
}

2- 在文件 App\Providers\EventServiceProvider.php 中的 protected $listen 数组中注册事件和监听器

use loginCuentas\Events\UserWasLogged;
use App\Listeners\afterUserLogged;

class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        UserWasLogged::class =>[
            afterUserLogged:: class,
        ]
    ];

    ...

注意,这里导入的事件来自库 loginCuentas,监听器则是您在应用程序中创建的。

修改视图

如果您想修改此包提供的视图,请使用以下命令发布它们:

php artisan vendor:publish --provider="loginCuentas\LoginCuentasServiceProvider" --tag="views"

这将在您的应用程序中创建一个包含所有视图的文件夹,位于 resources/views/vendor/loginCuentas

用户路由和视图

loginCuentas 为用户管理提供了三个路由:

  • GET /users - 显示用户列表(如下面的图片所示)。
  • POST /users - 用于创建用户。
  • GET /users-sync - 用于同步账户与您的应用程序或反之亦然。

img

注意,每个用户都有一个“状态”

  • 已同步:已注册到您的应用程序数据库和cuentas.sofse.gob.ar。
  • 不存在于系统中:已注册到cuentas.sofse.gob.ar,但不是您的应用程序。
  • 未关联到账户:已注册到您的应用程序数据库,但未注册到cuentas.sofse.gob.ar。

注意,当用户未“同步”时,将显示一个“同步”按钮,点击该按钮将同步用户在cuentas.sofse.gob.ar的信息与您的应用程序数据库。

您可能想将用户视图嵌入到应用程序的模板 app.balde.php 中:为了做到这一点,只需发布视图,并在文件 resources/views/vendor/loginCuentas/users/index.blade.php 中替换 @extends('loginCuentas::template') 标签的值。

  #@extends('loginCuentas::template')
  @extends('layouts.app')

默认的“查看”和“编辑”按钮会重定向到

  • 查看: GET /users/{id}
  • 编辑: GET /users/{id}/edit

您可以通过修改配置文件 config/loginCuentas.php 来改变此行为,并更改以下变量的值:

  • 显示用户视图的URL urlShowUser
  • 编辑用户视图的URL urlEditUser