
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 提供强大的加密功能,主要包括 encrypt
和 decrypt
。
$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');}
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年04月30日 04时24分21秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java反序列化和JNDI注入漏洞案例实战
2025-04-02
Java反序列化测试
2025-04-02
JAVA反序列化漏洞修复解决方法
2025-04-02
java反应式框架Reacto中的Mono和Fiux
2025-04-02
java反编译工具--jd-gui
2025-04-02
java取整和java四舍五入方法
2025-04-02
Java可变参数列表
2025-04-02
Java各中依赖包介绍
2025-04-02
Java合同管理系统(源码+mysql+文档)
2025-04-02
Java合肥市公务员报名管理系统(源码+mysql+文档)
2025-04-02
Java合肥惠康养老平台app(源码+mysql+文档)
2025-04-02
Java后端使用socketio,实现小程序答题pk功能
2025-04-02
Java后端开发书架
2025-04-02
Java后端开发:推荐常用的13款开发工具(非常详细)零基础入门到精通,收藏这一篇就够了
2025-04-02
Java基础学习总结(47)——JAVA输入输出流再回忆
2025-04-02
Java基础学习总结(4)——对象转型
2025-04-02
Java基础学习总结(4)——对象转型
2025-04-02
Java基础学习总结(51)——JAVA分层理解
2025-04-02
Java基础学习总结(53)——HTTPS 理论详解与实践
2025-04-02