Laravel 自带的Auth验证登录方法

laravel有自带的登录验证#

在laravel有自带的登录验证。只要建立对应的表和配置一些文件就能够使用,无需开发者自己去实现登录逻辑。

第一步:配置方面

config下的auth.php配置guardsproviders 。 之后新建文件和数据库名称要和这里的对应。

Copy Highlighter-hljs
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', 'hash' => false, ], //Laravel Auth 验证登录 'member' => [ 'driver' => 'session', 'provider' => 'member', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], // 'member' => [ 'driver' => 'eloquent', 'model' => App\Models\Member::class, ], // 'users' => [ // 'driver' => 'database', // 'table' => 'users', // ], ],

第二步:数据库方面

1 .新建Member表,作为用户表

2.模型中新建Member.php 文件对应,文件名称取决于配置文件中的名称

Copy Highlighter-hljs
class Member extends Authenticatable { use HasFactory; protected $table = 'xlyhb'; public $timestamps = false; public $incrementing = false; protected $guarded = []; //protected $hidden = []; public function getAuthPassword() { //return $this->attributes['pwdmd5']; return $this->pwdmd5; //或其它名称,以上两种写法都OK } }

第三步:控制器中使用

Copy Highlighter-hljs
Auth::guard('Member')->attempt($credentials)); 尝试登录 Auth::guard($guard)->guest();判断用户是否来宾,可用于中间件,判断用户是否登录,返回false,则已经登录,反之,跳转会登录页面 Auth::guard($guard)->user();获取已经登录的用户信息,注意在__construct()中无法获取,可以在中间件里面获取
Copy Highlighter-hljs
$credentials = $request->only('username', 'password'); /** * 使用laravel自带的Auth登录 * 1、密码使用的是hash加密 $crypt = password_hash($password, PASSWORD_DEFAULT); */ if(Auth::guard('admin')->attempt($credentials)){ return response()->json(['code' => 200, 'msg' => '登录成功']); }else{ return response()->json(['code' => 403, 'msg' => '用户名或密码错误']); }

第四步:创建web中间件

php artisan make:middleware MemeberAuth

Copy Highlighter-hljs
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Auth; class MemeberAuth { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next, $guard = null) { //如果没有指定的话,默认 guard 是 web, //dump(Auth::guard($guard)->check()); 判断用户是否认证 //Auth::guard($guard)->user() 获取用户信息 //Auth::guard($guard)->guest() 是否是来宾 if(Auth::guard($guard)->guest()){ if($request->ajax() || $request->wantsJson()){ return response('Unauthorized.', 401); }else{ return redirect()->guest('admin/login'); } return $next($request); } } }

laravel更改默认的登录密码加密方式#

laravel 默认用的登录密码加密方式是:

Copy Highlighter-hljs
$password = Hash::make('password');

而我平时用的密码加密方式是:

Copy Highlighter-hljs
$password = md5('password');

修改:

1.首先,打开这个文件夹:/vender/laravel/framework/src/illuminate/Auth

2.打开 EloquentUserProvider.php文件,将validateCredentials这个方法里的内容改成这样的:

Copy Highlighter-hljs
public function validateCredentials(UserInterface $user, array $credentials) { $plain = $credentials['password']; $authPassword = $user->getAuthPassword(); return $authPassword === md5($plain); }

这样就ok了、可以使用laravel的验证方法验证,最后推荐使用laravel的HASh加密方式更加安全。MD5毕竟是可以破解的

修改laravel中默认Auth的password和name字段#

如果想用username代替name,你可以重写username()方法在你的LoginController.php中:

Copy Highlighter-hljs
public function username(){ return 'username'; }

同样的, 如果想用passwd代替password,可以写一个存取器,在你的App\User.php

Copy Highlighter-hljs
public function getAuthPassword(){ return $this->passwd; }

在绑定用户表的模型中,重写 getAuthPassword() 方法,而在 attempt 方法中照常使用 password 就可以。

Copy Highlighter-hljs
Auth::guard('member')->attempt(['username'=>'13','password'=>'123456']);
posted @   caibaotimes  阅读(2356)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示
CONTENTS