selfsimilar / laravel-d7-password
Laravel 包,用于检查和创建 Drupal 7 密码散列
v1.0.0
2023-02-16 17:56 UTC
Requires
- php: >=5.3.0
- illuminate/support: >=4.0.0
- selfsimilar/drupal7_password_hasher: ^1.0
Requires (Dev)
- mockery/mockery: dev-master
- phpunit/phpunit: ^9
Replaces
- selfsimilar/laravel-drupal7-password: v1.0.0
README
此 Laravel 8 包提供了一个简单的方式来创建和检查 Drupal 7 密码散列。无需 Drupal。
安装
步骤 1:Composer
首先通过 Composer 安装此包。编辑项目中的 composer.json
文件,添加 selfsimilar/laravel-d7-password
作为依赖。
"require": { "selfsimilar/laravel-d7-password": "~0.1.2" }
然后,在终端中更新 Composer
composer update
步骤 2:注册 Laravel 服务提供者
操作完成后,下一步是 注册服务提供者。
- Laravel 5-8.x:打开
config/app.php
,向 providers 数组中添加一个新项
'Selfsimilar\D7Password\D7PasswordProvider'
用法
添加对 D7Password 门面的 use 语句
use Selfsimilar\D7Password\Facades\D7Password;
make()
- 创建密码散列
类似于 Drupal 的 user_hash_password()
函数
$hashed_password = D7Password::make('plain-text-password');
check()
- 检查密码散列
类似于 Drupal 的 user_check_password()
函数
$password = 'plain-text-password'; $d7_hashed_password = '$S$B7TRc6vrwCfjgKLZLgmN.dmPo6msZR.'; if ( D7Password::check($password, $d7_hashed_password) ) { // Password success! } else { // Password failed :( }
依赖注入
我在文档中使用了门面以简化说明。如果您不希望使用门面,可以注入以下接口:Selfsimilar\D7Password\Contracts\D7Password
。
建议
虽然原则上您可以注册并使用 D7PasswordHasher 作为默认散列程序并保持密码不变,但您还可以将密码更新为更安全、更强大的 Laravel 默认 Bcrypt 算法。在验证身份时,首先使用默认散列程序进行检查,如果失败,则再次使用 Drupal 7 散列程序进行检查。如果成功,则简单地更新密码散列以供未来的登录使用。
例如,假设您有一个使用 Fortify(或使用 Fortify 的 Jetstream)的全新 Laravel 8 应用程序,请对 app/Providers/FortifyServiceProvider.php
进行以下更改。
导入以下内容
use App\Models\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Hash; use Selfsimilar\D7Password\Facades\D7Password as D7Hash;
将其添加到 boot()
方法中
Fortify::authenticateUsing(function (Request $request) { $user = User::where('email', $request->email)->first(); if ($user) { if (Hash::check($request->password, $user->password)) { return $user; } else { if (D7Hash::check($request->password, $user->password)) { $user->update(['password' => Hash::make($request->password)]); return $user; } } } });