Laravel Web 认证

Laravel 自身的web认证路由默认包括登录、注册和密码重置,除了登录之外,其它都是可以根据需求选择要还是不要,很灵活。

默认生成的web认证路由

Auth::routes();

需要邮箱验证的

Auth::routes(['verify' => true]);

不需要注册功能

Auth::routes(['register' => false]);`

不需要重置密码

Auth::routes(['reset' => false]);

登录成功以后,默认跳转至 /home 路径下,可以通过添加下面的方法,来修改默认跳转路径:

protected function redirectTo()
{
    return '/test';
}

当然也可以修改 App\Providers\RouteServiceProvider 类中的 HOME 常量:

public const HOME = '/test';

获取登录成功以后的信息

// 获取登录用户实例
$user = Auth::user();
$user = auth()->user();
// use Illuminate\Http\Request;
$user = $request->user();
// 获取登录用户id
$id = Auth::id();
$id = auth()->id()
// 验证用户是否已登录,适合使用中间件验证
if(Auth::check()) {
    // 已登录
}

添加认证条件

Route::get('profile', function () {
    // 只有认证用户才可以进来
})->middleware('auth');

// 或者在控制器中的构造函数中指定
// 执行该控制器中所有的动作必须都是经过认证的用户
public function __construct()
{
    $this->middleware('auth');   
}
// 执行该控制器中除了index和show之外的动作必须都是经过认证的用户
public function __construct()
{
    $this->middleware('auth')->except(['index', 'show']);    
    // 或者
    // $this->middleware('auth', ['except' => ['index', 'show]]);
}
// 执行该控制器中edit和update动作必须是经过认证的用户
public function __construct()
{
    $this->middleware('auth')->only(['edit', 'update']);    
    // 或者
    // $this->middleware('auth', ['only' => ['edit', 'update]]);
}

登出

Auth::logout();

手动认证用户

// 当不想用自带的控制器去认证用户,可以自己手动认证
use Illuminate\Http\Request;
use Auth;
class LoginController extends Controller
{
    public function authenticate(Request $request)
    {
        $credentials = $request->only('email', 'password);
        if(Auth::attempt($credentials)) {
            // Authentication passed ...
        }
    }
}
// Route::post('/authenticate', 'Auth\LoginController@authenticate');

if(Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
    // 字段 active 必须是 1
}

记住用户

// $remember 是个 bool 值
if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) {
    // the user is being remember... 内置的 LoginController 已实现 remember
}

Auth::login($user);
Auth::login($user, true);   // 记住用户
Auth::loginUsingId(1);
Auth::loginUsingId(1, true);  // 记住用户
Auth::once($credentials);   // 临时认证, 无状态的

无登录页面,利用弹窗请求认证用户

// auth.basic 中间件,访问需要认证的路有时候,如果还未认证,则浏览器会弹出一个登录认证的弹窗
Route::get('profile', function() {
    dump(auth()->user());
})->middleware('auth.basic');

单设备登录

// 取消登录在别的设备上的认证
// 实现:
// 在 App\Http\Kernel::class 中取消注释: \Illuminate\Session\Middleware\AuthenticateSession::class,
Route::get('/out', function () {
    Auth::logoutOtherDevices($password);  // 传入当前登录用户的密码 123456
})->middleware('auth');
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!