安装
composer require whereof/think-auth 1.0-alpha
基础user表
CREATE TABLE `users` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `users_email_unique` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
配置
<?php
return [
'default' => 'web',
'guards' => [
'web' => [
'driver' => 'session',
'provider' => [
'driver' => 'database',
'table' => 'users',
],
],
'api' => [
'driver' => 'session',
'provider' => [
'driver' => 'model',
'model' => \whereof\think\auth\User::class,
],
],
],
];
使其他设备上的 session 失效
<?php
// 全局中间件定义文件
return [
// Session初始化
\think\middleware\SessionInit::class
];
密码始终验证不通过
在默认情况下采用的是password_verify
函数进行校验,所以您在加密的时候,需要使用函数password_hash
进行加密
自定义密码验证
- 自定义md5的方式
<?php
namespace app;
use whereof\think\auth\Contracts\Authenticatable;
use whereof\think\auth\Contracts\Password;
/**
* Class Md5
* @author zhiqiang
* @package app
*/
class Md5 implements Password
{
/**
* @param Authenticatable $user
* @param string $password
* @return bool
*/
public function passwordVerify(Authenticatable $user, string $password)
{
return md5($password) == $user->getAuthPassword();
}
}
- 修改配置文件
<?php
return [
.............
// 自定义密码验证
'password' => \app\Md5Password::class,
.............
];
登陆
//如果你愿意,除了用户的电子邮件和密码之外,还可以向身份验证查询中添加额外的查询条件。为了实现这一点,我们可以简单地将查询条件添加到传递给 attempt 方法的数组中。
Auth::attempt(['email' => '[email protected]', 'password' => '123456'], true);
//您可以将布尔值作为第二个参数传递给 login 方法。此值指示是否需要验证会话的 「记住我」 功能。请记住,这意味着会话将被无限期地验证,或者直到用户手动注销应用程序:
Auth::login(User::find(1), $remember = false);
//只验证一次
Auth::once(['email' => '[email protected]', 'password' => '123456']);
//只验证一次通过id
Auth::onceUsingId(1);
获取已认证的用户信息
use whereof\think\auth\Facades\Auth;
// 获取当前的认证用户信息 ...
$user = Auth::user();
// 获取当前的认证用户id ...
$id = Auth::id();
确定当前用户是否经过身份验证
use whereof\think\auth\Facades\Auth;
if (Auth::check()) {
// 用户已登录...
}
记住用户
use whereof\think\auth\Facades\Auth;
if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) {
// 正在为该用户执行记住我操作 ...
}
使用户退出登录(清除会话)
Auth::logout();
访问特定的看守器实例
Auth::guard('api')->attempt($credentials);
Auth::guard('api')->login(User::find(1), $remember = false);