selfsimilar/laravel-d7-password

Laravel 包,用于检查和创建 Drupal 7 密码散列

安装次数: 2,103

依赖者: 0

建议者: 0

安全: 0

星标: 4

关注者: 2

分支: 0

开放问题: 0

类型:laravel-package

v1.0.0 2023-02-16 17:56 UTC

This package is auto-updated.

Last update: 2024-09-16 21:40:17 UTC


README

Build Status

此 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;
      }
    }
  }
});