laravel-admin自定义登录 / 登陆
前提
如果需要使用自定义登录,需要能获取到登录用户的相关信息,然后使用相关信息进行登录。这样可以绕开laravel-admin默认的账号密码登录机制进行登录。
代码
直接上代码吧,代码中我们获取到了用户ID,然后通过用户ID获取到用户信息进行登录。
控制器代码
成功后直接跳转到laravel-admin后台首页,失败返回上一页。
<?php
declare(strict_types=1);
namespace App\Admin\Controllers;
use Encore\Admin\Auth\Database\Administrator;
use Illuminate\Http\Request;
use Encore\Admin\Controllers\AuthController as BaseAuthController;
class LoginController extends BaseAuthController
{
public function autoLogin (Request $request) {
$user_id = $request->input("user_id");
$user = Administrator::where("id", $user_id)->first();
if ($user) {
$this->guard()->login($user);
return redirect()->intended("admin");
}
return redirect()->back();
}
}
路由代码
添加自定义登录路由
<?php
use Illuminate\Routing\Router;
Admin::routes();
Route::group([
'prefix' => config('admin.route.prefix'),
'namespace' => config('admin.route.namespace'),
'middleware' => config('admin.route.middleware'),
'as' => config('admin.route.prefix') . '.',
], function (Router $router) {
$router->get("auto-login", "LoginController@autoLogin");
});
配置文件修改
修改config/admin.php中以下代码,添加自定义登录路由权限豁免
// The URIs that should be excluded from authorization.
'excepts' => [
'auto-login',
'auth/login',
'auth/logout',
'_handle_action_',
],
这样只需要在访问自定义登录路由的时候将用户ID传过来就可以实现自动登录了:/admin/auto-login?user_id=?