laravel 5.5 -- Authentication 认证 laravel 安全
发布日期:2025-04-04 01:56:18 浏览次数:11 分类:精选文章

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

Laravel 认证系统与加密

认证系统概述

Laravel 提供强大的认证系统,主要包括两部分:Guard(.guard)和 Provider(.provider)。Guard 负责对用户身份进行验证,而 Provider 负责从持久化存储(如数据库)中加载用户数据。

Guard Provider 的常见实现包括使用 Eloquent DB 存储。用户通过 session guardproviders 从持久化存储中获取用户信息。默认的认证配置通常无需修改即可使用。


认证快速开始

使用 Laravel 的认证功能,可以通过以下命令快速初始化:

php artisan make:auth

|| 使用 redirect() 方法指定登录成功后的跳转地址,方法优先级高于属性定义:

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

|| 可以通过修改 username() 方法返回自定义字段:

public function username() {    return 'username';}

|| 自定义 Guard:

use Illuminate\Support\Facades\Auth;protected function guard() {    return Auth::guard('guard-name');}

|| 在路由中指定 Guard:

->middleware('auth:api')

|| 失败次数过多会阻止登录判定,标准基于 username 方法返回值和 IP:

if (Auth::attempt(['email' => $email, 'password' => $password])) {    return redirect()->intended('dashboard');}

手动认证用户

如果不喜欢默认控制器可以手动认证用户,通过 Auth::attempt() 方法。如:

if (Auth::attempt(['email' => $email, 'password' => $password])) {    return redirect()->intended('dashboard');}

如果需要额外条件:

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

如果要使用特定的 Guard:

if (Auth::guard('admin')->attempt($credentials)) {    // 指定 Guard 登录}

登录与退出

Auth::logout();

记住用户设置为无限期:

if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) {    // 用户被记住...}

判断是否选择记住:

if (Auth::viaRemember()) {    // ...}

API 认证

API 认证通常在路由中使用 middleware:

Route::post('/api/auth', function () {    // ...})->middleware('auth:api');

Gates 与 Policies

Gates 通常使用闭包定义简单逻辑,而 Policies 主要用于与模型或资源相关的复杂权限控制。

Gates 示例

定义 Gates:

Gate::define('update-post', function ($user, $post) {    return $user->id == $post->user_id;});

Polices 示例:

namespace App\Policies;use App\Models\Post;class PostPolicy{    public function update(User $user, Post $post)    {        return $user->id == $post->user_id;    }}

Laravel 加密

Laravel 提供强大的加密功能,主要包括 encryptdecrypt

$encrypted = Crypt::encryptString('Hello world!');$decrypted = Crypt::decryptString($encrypted);

如果序列化需要加密:

try {    $decrypted = decrypt($encryptedValue);} catch (DecryptException $e) {    // ...}

Laravel Hash

使用 Laravel Hash 对密码进行加密。生成哈希:

$passwordIntoDB = Hash::make($request->newPassword);

验证哈希:

if (Hash::check('plain-text', $hashedPassword)) {    // 密码匹配}

检查是否需要重新哈希:

if (Hash::needsRehash($hashed)) {    $hashed = Hash::make('plain-text');}
上一篇:[Linux]从零开始的网站内网穿透教程
下一篇:laravel 5.3用户认证--默认的用户表数据迁移

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年04月30日 04时24分21秒