修改Laravel 的 Auth::attempt () 密码默认加密方式

以下方法在laravel5.6测试成功

一、背景

如果你在使用Laravel的话,用户验证的代码只需要一行代码就可以搞定

if (auth('admin')->attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
    // 验证成功的逻辑
}

但是,如果你想切换为自定义的加密验证方式,那么这篇文章可能会给你一些思路

二、实现方法

1. 编写自己的hasher

<?php

namespace App\Libs;

use Illuminate\Contracts\Hashing\Hasher;
 class NoHasher implements Hasher
{
    /**
     * Get information about the given hashed value.
     *
     * @param  string  $hashedValue
     * @return array
     */
    public function info($hashedValue)
    {
        return [];
    }

    public function check($value, $hashedValue, array $options = [])
    {
        return $this->make($value) === $hashedValue;
    }

    public function needsRehash($hashedValue, array $options = [])
    {
        return false;
    }

    public function make($value, array $options = [])
    {
        // $value = env('SALT', '') . $value;
        return $value;  //这里写你自定义的加密方法,这里没有加密
    }
}

2. 用自己的Hasher替换默认的Hasher

创建NoHashServiceProvider

php artisan make:provider NoHashServiceProvider

添加如下方法

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Libs\NoHasher;

class NoHashServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        $this->app->singleton('hash', function () {
            return new NoHasher;
        });
    }

    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    public function provides()
    {
        return ['hash'];
    }
}

3. 在config/app.php的providers中,将

Illuminate\Hashing\HashServiceProvider::class,

替换为

App\Providers\NoHashServiceProvider::class,

OK,大功告成

发布了21 篇原创文章 · 获赞 2 · 访问量 1666

猜你喜欢

转载自blog.csdn.net/qq_23062949/article/details/103286797
今日推荐