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.x
php 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+ 使用 Jetstream
php 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+ 使用 Sanctum
php 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.php
User::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 真的 很安全的了