Laravel 6 内置 web 认证
发布日期:2025-04-04 02:15:19 浏览次数:13 分类:精选文章

本文共 1762 字,大约阅读时间需要 5 分钟。

Laravel 认证系统详解

1. 登录与注册原理

在 Laravel 中,用户登录和注册均依赖于会话(Session)机制。具体流程如下:

  • 注册:用户完成注册后,服务器端生成一个 session 文件,并将文件名返回给用户。

  • 登录:用户使用账号密码登录成功后,服务器端同样生成 session 文件,并将文件名返回用户。

  • 认证:在后续请求中,前端传递 session 文件名,服务器使用该文件名查找对应的文件进行认证。如果存在有效文件认证成功,否则失败。

  • 2. 系统准备

    安装 Laravel 开发环境,并设置数据库:

    composer create-project --prefer-dist laravel/laravel 6
    cd your-app
    npm install
    cnpm install --global --registry=https://registry.npm.taobao.org
    cnpm install
    php artisan migrate

    建议可在 config/app.php 中禁用注册功能:

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

    3. 验证与认证优化

  • 登录跳转优化

    可通过 LoginController 定义 redirectTo 属性或方法,灵活设置登录成功后的跳转地址:

    protected function redirectTo()
    {
    return '/path'; // 或直接调用路由
    }
  • 自定义认证字段

    定义认证字段为 username(默认为 email):

    public function username()
    {
    return 'name';
    }
  • 获取用户信息

    过程中可使用 Auth::user() 获取当前登录用户信息。

  • 中间件应用

    添加中间件到指定路由或控制器:

    Route::get('profile', function () {
    // ...
    })->middleware('auth');
  • 权限控制

    使用 can:action middleware 定义路由权限:

    Route::get('/settings/security', function () {
    // ...
    })->middleware('can:settings,security');
  • 4. 拦截机制

    Laravel 提供完整的认证拦截机制,可灵活配置:

  • 失败次数限制

    默认禁止登录的次数为5次,有效时间为1分钟,判断依据包含 usernameip

  • 退出操作

    调用 Auth::logout() 进行退出。

  • 过期时间管理 自定义会话过期时间:

    config()->set('session.lifetime', 120);
  • 5. 自定义认证

    若需要自定义认证逻辑,可移除默认控制器,实现 Auth facade

    only('email', 'password');
    if (Auth::attempt($credentials)) {
    return redirect('/some/url');
    }
    }
    }
    Route::post('/authenticate', 'Auth\LoginController@authenticate')->name('authenticate');

    6. 记住用户

    用户可选择记住登录信息,通过 Auth::remember() 实现:

    if (Auth::attempt(['email' => $email, 'password' => $password], true)) {
    // 记住登录信息
    }

    或者直接调用:

    Auth::login($user); // 可选无限期存存储

    7. 弹窗验证

    若无需传统登录页面,可通过弹窗实现认证:

    willing: implement via JS -->

    8. 设备独识别

    实现跨设备登录唯一性:

    Auth::logoutOtherDevices($password);

    以上配置均可实现灵活的认证管理,适用于多种应用场景。

    上一篇:Laravel 6 核心概念(服务容器、服务提供者、facades、contracts、辅助函数、生命周期)
    下一篇:laravel 6 内置 web 认证

    发表评论

    最新留言

    留言是一种美德,欢迎回访!
    [***.207.175.100]2025年04月18日 16时08分58秒