0 评论

0 收藏

分享

[PHP以及PHP框架相关] Laravel 系统版本查看及artisan管理员密码找回方法针对各个版本通用方法及原理-优雅草

Laravel 系统版本查看及artisan管理员密码找回方法针对各个版本通用方法及原理-优雅草卓伊凡一、查看 Laravel 版本的方法
优雅草蜻蜓T会议系统专业版 最近又有客户要了,但是发现 密码不对 管理员账户密码不对,卓伊凡必须处理下,这里顺便讲解密码原理
1. 通过命令行查看(最准确)php artisan --version# 示例输出:Laravel Framework 10.10.0
我输出 版本 又遇到 问题了,不过已经解决
Laravel Framework 8.83.27
我们的版本是8
其实确实算比较新了,
2. 通过 composer.json 文件查看cat composer.json | grep laravel/framework# 示例输出:"laravel/framework": "^10.0"
看了看composer.json
没问题 首任主程 写的很好
没问题 除了版本没写 其他依赖都有 能看到 也利于维护
3. 通过 PHP 代码查看// 在路由或控制器中添加Route::get('/version', function() {    return app()->version();});// 访问 /version 即可看到二、不同 Laravel 版本找回 admin 密码的方法通用方法(适用于所有版本)方法1:使用 Tinker 重置密码php artisan tinker# 在 tinker 中执行:$user = App\Models\User::where('email', 'admin@example.com')->first();$user->password = Hash::make('new_password');$user->save();
不过这里要改改 我们字段是username 然后是admin
$user = App\Models\User::where(‘username’, ‘admin’)->first();
$user->password = Hash::make(‘密码’);
$user->save();
因此应该这样执行,这里脱敏我写的密码
提示我是未知字段,失败了,
方法2:数据库直接更新UPDATE users SET password = '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi' WHERE email = 'admin@example.com';# 上面密码对应明文是 "password"
这个方法 应该可行性高一些,
版本特定方法Laravel 5.x - 7.xphp artisan make:command ResetAdminPassword
然后在生成的命令文件中:
public function handle(){    $user = User::where('email', 'admin@example.com')->first();    $user->password = bcrypt('new_password');    $user->save();    $this->info('Password reset successfully!');}Laravel 8.x 及以上php artisan make:command ResetAdminPassword
命令文件内容:
public function handle(){    $user = \App\Models\User::where('email', 'admin@example.com')->first();    $user->forceFill([        'password' => \Illuminate\Support\Facades\Hash::make('new_password')    ])->save();    $this->info('Password reset successfully!');}
刚刚我们已经看过我们的版本是8了 所以我们用这个方法应该才是最可靠的
根据情况 我们创建应该是
在 Laravel 项目中,使用 php artisan make:command ResetAdminPassword 生成的命令文件默认会存放在以下路径:
标准路径:
app/Console/Commands/ResetAdminPassword.php详细说明
  • 文件完整路径结构:
    your-project/  ├── app/  │   ├── Console/  │   │   ├── Commands/  │   │   │   └── ResetAdminPassword.php  ← 这就是生成的文件  │   │   └── Kernel.php
  • 文件内容示例:
    生成的 ResetAdminPassword.php 会包含类似这样的基础结构:
    <?phpnamespace App\Console\Commands;use Illuminate\Console\Command;class ResetAdminPassword extends Command{    protected $signature = 'command:name';    protected $description = 'Command description';    public function __construct()    {        parent::__construct();    }    public function handle()    {        // 命令逻辑代码    }}
  • 如何验证文件是否存在:
    • 命令行方式:ls app/Console/Commands/ResetAdminPassword.php
    • 或使用PHP检查:php -r "echo file_exists('app/Console/Commands/ResetAdminPassword.php') ? '存在' : '不存在';"
  • 如果找不到文件:
    • 检查是否在项目根目录执行命令
    • 运行 composer dump-autoload 重新生成自动加载
    • 检查 app/Console/Commands/ 目录是否存在
  • 注册命令:
    生成后需要在 app/Console/Kernel.php 的 $commands 数组中添加:
    protected $commands = [    Commands\ResetAdminPassword::class,];
  • 使用命令:
    注册后可以通过以下方式执行:
    php artisan list  # 查看可用命令php artisan your:command-name  # 执行你的命令
提示:如果你自定义了 Laravel 的目录结构,文件可能会出现在你配置的对应路径中,可以通过检查 composer.json 的 autoload.psr-4 配置确认实际路径。
我们打开查看到原始内容
修改成我们的内容
public function handle()
{
$user = \App\Models\User::where(‘username’, ‘admin’)->first();
$user->forceFill([
‘password’ => \Illuminate\Support\Facades\Hash::make(‘123456’)
])->save();
$this->info(‘Password reset successfully!’);
}
默认改123456
验证命令签名
打开 ResetAdminPassword.php 文件,检查 $signature
protected $signature = ‘admin:reset-password’;
注册命令
在 app/Console/Kernel.php 中添加:
那么我执行命令为
php artisan admin:reset-password
这样就可以重置密码
完整重置密码,nice!卓伊凡!
使用 Laravel Breeze/Jetstream 的情况Laravel 8+ 使用 Jetstreamphp artisan tinker$user = \App\Models\User::where('email', 'admin@example.com')->first();$user->forceFill(['password' => \Illuminate\Support\Facades\Hash::make('new_password')])->save();Laravel 8+ 使用 Sanctumphp artisan tinker$user = \App\Models\User::find(1);$user->password = \Illuminate\Support\Facades\Hash::make('new_password');$user->save();三、预防措施
  • 创建密码重置命令:
    php artisan make:command ResetPasswordCommand
  • 添加管理员种子用户:
    // 在 DatabaseSeeder.phpUser::create([ 'name' => 'Admin', 'email' => 'admin@example.com', 'password' => Hash::make('temp_password'), 'is_admin' => true]);
  • 设置密码过期策略(Laravel 8+):
    // 在 AppServiceProvider.php\Illuminate\Auth\Passwords\PasswordBrokerManager::macro('setDefaultPasswordTimeout', function($timeout) { config(['auth.passwords.users.expire' => $timeout]);});
四、安全建议
  • 重置后立即修改临时密码
  • 使用强密码生成器:use Illuminate\Support\Str;$password = Str::password(12); // Laravel 9+
  • 考虑使用双重认证
  • 定期轮换管理员密码
以上方法覆盖了从 Laravel 5.x 到最新版本的管理员密码找回需求
整体来说 laravel 真的 很安全的了

优雅草论坛2022年8月11日大改,优雅草论坛变回只服务于客户的提问交流论坛,详情查看优雅草8月11日大改,原因详情查优雅草外卖乐关闭

回复

举报 使用道具

全部回复
暂无回帖,快来参与回复吧
yac2025
优雅草的临时工
主题 228
回复 0
粉丝 0