samsonasik / mezzio-authentication-with-authorization
Laminas 框架骨架示例,包括身份验证和授权功能,包含 csrf、flash、prg
dev-master
2021-09-03 09:35 UTC
Requires
- php: ^7.3 || ~8.0.0 || ~8.1.0
- laminas/laminas-component-installer: ^2.1.1
- laminas/laminas-config-aggregator: ^1.0
- laminas/laminas-dependency-plugin: ^0.2 || ^1.0 || ^2.0
- laminas/laminas-diactoros: ^2.0
- laminas/laminas-form: ^2.11
- laminas/laminas-i18n: ^2.7
- laminas/laminas-servicemanager: ^3.3
- laminas/laminas-stdlib: ^3.1
- mezzio/mezzio: ^3.0.1
- mezzio/mezzio-authentication: ^1.1.0
- mezzio/mezzio-authentication-session: ^1.0.1
- mezzio/mezzio-authorization: ^1.0
- mezzio/mezzio-authorization-acl: ^1.0.2
- mezzio/mezzio-csrf: ^1.0.0
- mezzio/mezzio-flash: ^1.0.0
- mezzio/mezzio-helpers: ^5.0
- mezzio/mezzio-laminasrouter: ^3.0
- mezzio/mezzio-laminasviewrenderer: ^2.0
- mezzio/mezzio-session: ^1.3.0
- mezzio/mezzio-session-ext: ^1.7.1
- roave/security-advisories: dev-master
Requires (Dev)
- filp/whoops: ^2.1.12
- laminas/laminas-coding-standard: ^2.0.0
- laminas/laminas-development-mode: ^3.1
- mezzio/mezzio-tooling: ^1.0
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^9.0
- rector/rector: ^0.11.52
This package is auto-updated.
Last update: 2024-08-29 05:24:37 UTC
README
简介
一个带有身份验证和授权示例的 Mezzio 3 骨架应用程序。
特性
- 使用 csrf 加密的身份验证
- 使用 prg 提高可用性的身份验证
- 带有“记住我”功能的身份验证
- 使用会话闪存的身份验证通知
- 使用 ACL 进行授权
- 布局中的 isGranted 检查
- 布局中的 getRole 检查
安装
$ composer create-project samsonasik/mezzio-authentication-with-authorization -sdev
$ cd mezzio-authentication-with-authorization
$ cp config/autoload/local.php.dist config/autoload/local.php
配置
使用带有用户名和密码字段的本地数据库配置配置您的 config/autoload/local.php
。提供了 dsn
的示例,适用于 PostgreSQL
和 MySQL
,您可以修改它们。
对于 PostgreSQL
以下命令是使用 PostgreSQL 的示例(假设使用用户 "postgres" 并创建名为 "mezzio" 的数据库),您可以创建用户表,并将用户名和 bcrypt 加密密码(使用 pgcrypto 扩展)插入用户表
$ createdb -Upostgres mezzio Password: $ psql -Upostgres mezzio Password for user postgres: psql (12.1) Type "help" for help. mezzio=# CREATE TABLE users(username character varying(255) PRIMARY KEY NOT NULL, password text NOT NULL, role character varying(255) NOT NULL DEFAULT 'user'); CREATE TABLE mezzio=# CREATE EXTENSION pgcrypto; CREATE EXTENSION mezzio=# INSERT INTO users(username, password, role) VALUES('samsonasik', crypt('123456', gen_salt('bf')), 'user'); INSERT 0 1 mezzio=# INSERT INTO users(username, password, role) VALUES('admin', crypt('123456', gen_salt('bf')), 'admin'); INSERT 0 1
并将获得以下数据
对于 MySQL
以下命令是使用 MySQL 的示例(假设使用用户 "root" 并创建名为 "mezzio" 的数据库),您可以创建用户表,并插入用户名和 bcrypt 加密密码
$ mysql -u root -p -e 'create database mezzio' Enter password: $ mysql -u root Enter password: mysql> use mezzio Database changed mysql> CREATE TABLE users(username varchar(255) PRIMARY KEY NOT NULL, password text NOT NULL, role varchar(255) NOT NULL DEFAULT 'user'); Query OK, 0 rows affected (0.01 sec) mezzio=# INSERT INTO users(username, password, role) VALUES('samsonasik','$2a$06$Nt2zePoCfApfBGrfZbHZIudIwZpCNqorTjbKNZtPoLCVic8goZDsi', 'user'); Query OK, 1 row affected (0.01 sec) mezzio=# INSERT INTO users(username, password, role) VALUES('admin', '$2a$06$Y2TtankzyiK/OF1yZA4GsOJBhuoP7o99XbfufEeJ0OOJwjUcPB9LO', 'admin'); Query OK, 1 row affected (0.01 sec)
并将获得以下数据
授权配置
授权配置以 ACL 的形式保存在 config/autoload/global.php
中
<?php // config/autoload/global.php declare(strict_types=1); return [ // ... 'mezzio-authorization-acl' => [ 'roles' => [ 'guest' => [], 'user' => ['guest'], 'admin' => ['user'], ], 'resources' => [ 'api.ping.view', 'home.view', 'admin.view', 'login.form', 'logout.access', ], 'allow' => [ 'guest' => [ 'login.form', 'api.ping.view', ], 'user' => [ 'logout.access', 'home.view', ], 'admin' => [ 'admin.view', ], ], ], // ... ];
运行
- 清除浏览器缓存
- 运行 php -S 命令
$ php -S localhost:8080 -t public
-
打开浏览器: http://localhost:8080
-
使用用户名 : samsonasik,密码: 123456 或用户名 : admin,密码 : 123456 登录。如果您是以“user”角色登录的用户,并打开
/admin
页面,它将显示如下(403 禁止访问),例如:在 Firefox 开发者工具 下的“网络”监视器中查看
测试
测试位于 test
目录下,您可以使用 composer 命令运行测试
$ composer test