为了账号安全,请及时绑定邮箱和手机立即绑定

将数据库中的普通密码转换为Laravel加密密码

将数据库中的普通密码转换为Laravel加密密码

PHP
波斯汪 2022-08-05 10:37:29
我有一个名为“users”的表,其中我有来自用户的用户名和密码。密码为纯文本格式。现在,我使用Laravel 6.0和Auth创建了一个新网站。因此,如果用户想要登录我的网站,我需要将我的密码纯文本转换为加密的新密码。我如何从我的身份验证中获取“盐”,以及从我的普通密码和“盐”中获取加密密码的工具。原因是因为我在users表中创建了一个新列,因此我想将使用查询加密的密码放在那里。运行change_command
查看完整描述

2 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

Laravel立面提供安全的Bcrypt和Argon2哈希来存储用户密码。Hash


$password = Hash::make('plain-text-password');

该函数使用 Bcrypt 对给定值进行哈希处理。您可以将其用作立面的替代方案:bcryptHash


$password = bcrypt('plain-text-password');

我如何从我的身份验证中获取“盐”,以及从我的普通密码和“盐”中获取加密密码的工具。


根据哈希验证密码

该方法允许您验证给定的纯文本字符串是否与给定的哈希相对应。check


if (Hash::check('plain-text-password', $hashedPassword)) {

    // The passwords match...

}

更新

您可以使用 Command 或创建路由来更改现有客户的“纯文本”密码。


创建命令应用程序/控制台/命令/更改密码.php


<?php


namespace App\Console\Commands;


use App\User;

use Illuminate\Console\Command;

use Illuminate\Support\Facades\Hash;


class ChangePassword extends Command

{

    /**

     * The name and signature of the console command.

     *

     * @var string

     */

    protected $signature = 'change-password';


    /**

     * The console command description.

     *

     * @var string

     */

    protected $description = 'Plain-text password changer';


    /**

     * Create a new command instance.

     *

     * @return void

     */

    public function __construct()

    {

        parent::__construct();

    }


    /**

     * Execute the console command.

     *

     * @return mixed

     */

    public function handle()

    {

        $users = User::get();


        foreach ($users as $user) {

            if (Hash::needsRehash($user->password)) {

                $user->password = Hash::make($user->password);

                $user->save();

            }

        }


        $this->info('Done..');

    }

}

用法:

php artisan change-password

运行命令后,您可以尝试通过路由登录。Auth::routes()


或手动对用户进行身份验证

if (Auth::attempt($credentials)) {

    // Authentication passed...


查看完整回答
反对 回复 2022-08-05
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

您必须创建一个函数来首先将数据库密码更新为加密密码。


在 Web 上.php类似的东西,并在浏览器上访问 /password-updator


Route::get('/password_updator', function() {

 $allusers = \DB::table('users')->get();

 foreach($users as $user) {

  $user->password = bcrypt($user->password);

  $user->save();

}

});

在继续之前,请确保备份您的数据库!


或者,创建一个名为“password_hashed第一个 onn 用户”表的新列,并将其更新为试验。


https://laravel.com/docs/5.4/helpers#method-bcrypt


查看完整回答
反对 回复 2022-08-05
  • 2 回答
  • 0 关注
  • 111 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信