laravel Auth的使用
最新的文档是使用的 laravel/jetstream 扩展包,旧版本中的 php artisan make:auth 命令在新版本中已不能用,但是此博客没有使用文档提供的扩展包,而是使用的是laravel/ui扩展包。具体操作如下:
1.安装扩展
composer require laravel/ui
php artisan ui:auth
执行完成后会在web.php中自动添加路由:
Auth::routes();
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
其中 Auth::routes() 加载自动生成的路由配置,具体文件为:vendor\laravel\ui\src\AuthRouteMethods.php
2.生成数据表:
php artisan migrate
注意,如果在执行时报错,可能是由于数据库版本造成,需要进行以下修改:
app\Providers\AppServiceProvider.php 文件中 boot 方法增加代码:Schema::defaultStringLength(191);
此时,可以访问home来访问生成的应用程序。
如果我们想用自己的数据表,只用auth进行验证,操作如下:
1.创建数据表:
CREATE TABLE `member` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL DEFAULT '',
`password` varchar(255) NOT NULL DEFAULT '',
`age` tinyint(3) NOT NULL DEFAULT '0',
`sex` tinyint(3) NOT NULL DEFAULT '0',
`created_at` int(11) NOT NULL DEFAULT '0',
`updated_at` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
注意:laravel自带的Auth登录功能,密码使用的是hash加密 $crypt = password_hash($password, PASSWORD_DEFAULT),在添加测试数据时请注意密码加密方式。
2.创建model:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable; class Member extends Authenticatable
{
use HasFactory; protected $table = 'member'; //性别配置
const SEX_UN = 0;
const SEX_BOY = 1;
const SEX_GIRL = 2;
public static $sexText = [
self::SEX_UN => '未知',
self::SEX_BOY => '男',
self::SEX_GIRL => '女',
]; //自动维护时间戳
public $timestamps = true; //指定时间为unix时间戳
public function getDateFormat() {
return time();
} //查询出的时间戳不做任何处理
public function asDateTime($value)
{
return $value;
} //避免转换时间戳为字符串
public function fromDateTime($value)
{
return empty($value)?$value:$this->getDateFormat();
} }
3.创建控制器:
<?php namespace App\Http\Controllers; use App\Models\Member;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; class MemberController extends Controller
{ //登录页面
public function login() {
return view('member.login');
} //登录逻辑
public function loginlogic(Request $request) {
$credentials = $request->only('username', 'password');
$result = Auth::guard('member')->attempt($credentials);
if($result) {
return redirect('member/home')->with('success_msg','登录成功');
}
return redirect()->back()->with('error_msg', '账号或密码错误');
} //登录成功页面
public function home() {
//获取当前登录信息
$info = Auth::guard('member')->user();
//性别配置信息
$sexText = Member::$sexText;
return view('member.home', [
'info' => $info,
'sexText' => $sexText,
]);
} //退出登录逻辑
public function logout() {
Auth::logout();
return redirect('member/login');
} }
4.在view/member目录下创建视图文件:
创建login.blade.php:
<form method="post" action="{{url('member/loginlogic')}}">
@csrf
<table>
<tr>
<td>账号</td>
<td>
<input type="text" name="username">
</td>
</tr>
<tr>
<td>密码</td>
<td>
<input type="password" name="password">
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="登录">
</td>
</tr>
<tr style="{{Session::has('error_msg') ? '' : 'display: none;'}}">
<td colspan="2" style="font-size: 12px;color: red;">
错误提示信息:{{Session::has('error_msg') ? Session::get('error_msg') : ''}}
</td>
</tr>
</table>
</form>
创建home.blade.php:
<table>
<tr>
<td>当前页:home</td>
<td><a href="{{url('member/logout')}}">退出登录</a></td>
</tr> <tr>
<td colspan="2"></td>
</tr> <tr>
<td>用户名:</td>
<td>{{$info->username}}</td>
</tr>
<tr>
<td>性别:</td>
<td>{{$sexText[$info->sex]}}</td>
</tr>
<tr>
<td>年龄:</td>
<td>{{$info->age}}</td>
</tr>
<tr>
<td>注册时间:</td>
<td>{{date('Y-m-d H:i', $info->created_at)}}</td>
</tr>
</table>
5.修改config\auth.php配置
//guards下增加
'member' => [
'driver' => 'session',
'provider' => 'member',
], //providers下增加
'member' => [
'driver' => 'eloquent',
'model' => App\Models\Member::class,
],
6.创建中间件:
<?php namespace App\Http\Middleware; use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; class memberActivity
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next)
{
if(!Auth::guard('member')->check()) {
return redirect('member/login');
}
return $next($request);
}
}
7.Kernel.php中$routeMiddleware下添加路由中间件:
'member' => \App\Http\Middleware\memberActivity::class,
8.设置路由:
Route::group(['prefix'=>'member', 'middleware'=>['web']], function() {
Route::get('/login', [\App\Http\Controllers\MemberController::class, 'login']);
Route::post('/loginlogic', [\App\Http\Controllers\MemberController::class, 'loginlogic']); Route::group(['middleware'=>['member']], function() {
Route::get('/home', [\App\Http\Controllers\MemberController::class, 'home']);
Route::get('/logout', [\App\Http\Controllers\MemberController::class, 'logout']);
}); });
参考文档:
https://www.cnblogs.com/caibaotimes/p/14482312.html
https://learnku.com/articles/3758/laravel-user-authentication-system
https://qa.1r1g.com/sf/ask/4044196201/
https://learnku.com/docs/laravel/8.x/authentication/9381
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://www.cnblogs.com/facetwitter/p/15798378.html
laravel Auth的使用的更多相关文章
- Laravel Auth验证
laravel自带了auth类和User模型来帮助我们很方便的实现用户登陆.判断. 首先,先配置一下相关参数 app/config/auth.php: model 指定模型 table 指定用户表 p ...
- laravel Auth token创建于使用
token 的创建和使用, https://laravelacademy.org/post/3640.html 用户表密码字段验证修改,不只是password https://www.jianshu. ...
- [PHP] 浅谈 Laravel Authentication 的 auth:api
auth:api 在 Laravel 的 Routing , Middleware , API Authentication 主题中都有出现. 一. 在 Routing 部分可以知道 auth:api ...
- Laravel 认证原理及完全自定义认证
Laravel 默认的 auth 功能已经是很全面了,但是我们也经常会碰到一些需要自定义的一些情况,比如验证的字段和默认的不匹配,比如需要能够同时满足 user name 和 email 认证等等.如 ...
- laravel - ReflectionException in Container.php, Class not found?
SIGN UPSIGN IN CATALOG SERIES PODCAST DISCUSSIONS ReflectionException in Container.php, Class not fo ...
- Laravel核心解读 -- 扩展用户认证系统
扩展用户认证系统 上一节我们介绍了Laravel Auth系统实现的一些细节知道了Laravel是如何应用看守器和用户提供器来进行用户认证的,但是针对我们自己开发的项目或多或少地我们都会需要在自带的看 ...
- Laravel用户认证系统的实现细节
原文地址:http://www.php.cn/php-weizijiaocheng-406076.html 这篇文章主要介绍了关于Laravel用户认证系统的实现细节,有着一定的参考价值,现在分享给大 ...
- Laravel 5.2 使用 JWT 完成多用户认证 | Laravel China 社区 - 高品质的 Laravel 开发者社区 - Powered by PHPHub
Json Web Token# JWT代表Json Web Token.JWT能有效地进行身份验证并连接前后端. 降地耦合性,取代session,进一步实现前后端分离 减少服务器的压力 可以很简单的实 ...
- 一篇关于介绍php的几个user 认证相关的几个包
http://kodeinfo.com/post/laravel-authentication-packages LARAVEL AUTHENTICATION PACKAGES By Imran Iq ...
- Laravel 5.3 auth中间件底层实现详解
1. 注册认证中间件, 在文件 app/Http/Kernel.php 内完成: protected $routeMiddleware = [ 'auth' => \Illuminate\Aut ...
随机推荐
- LeetCode-688 骑士在棋盘上的概率
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/knight-probability-in-chessboard 题目描述 在一个 n x n 的 ...
- opencv-python 批量更改图像分辨率并且保留图像原有的透明度
opencv-python环境安装:https://www.cnblogs.com/technicist/p/17138657.html 案例代码(批量压缩图像分辨率为原来的一半,例如2400*139 ...
- swiper滑动异常
遇到这样的情况,一共5张slide,但是从第三个起再往右划就不动了.后来发现是已经初始化swiper后又追加了slide.(大概意思是这样.太久的程序了,也不想仔细捋了) 暂且用到的办法: 先定义好: ...
- ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost:3306' (10061)
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost:3306' (10061) 报错原因:电脑之前有个5.0.2版本的mys ...
- the default discovery settings are unsuitable for production use at least one of...的解决办法
解决办法 elasticsearch.yml加上 discovery.type: single-node
- Word17 学生儿童医保扣款方式更新的通知
1.课程的讲解之前,先来对题目进行分析,首先需要在考生文件夹下,将Wrod素材.docx文件另存为Word.docx,后续操作均基于此文件,否则不得分. 2.这一步非常的简单,打开下载素材文件,在[文 ...
- 0624.python入门
课堂笔记 一 编程语言 什么是编程语言? 上面提及的能够被计算机所识别的表达方式即编程语言,语言是沟通的介质,而编程语言是程序员与计算机沟通的介质.在编程的世界里,计算机更像是人的奴隶,人类编程的目的 ...
- Telnet 连接smtp协议手动发邮件
下面实验以QQ邮箱为例(比较多人用,其它邮箱也一样) Step1.打开CMD 输入:telnet SMTP服务器 SMTP端口地址 连接smtp服务器 Step2. 输入:helo 内容 (向它( ...
- leecode76. 最小覆盖子串
76. 最小覆盖子串 给你一个字符串 s .一个字符串 t .返回 s 中涵盖 t 所有字符的最小子串.如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" . 注意: ...
- reduced form(简化式)和structural form(结构式)
在复习软件构造的时候,我发现了这样一道练习题 例题要求我们对照给出的RI和AF画出相应的映射图.在这里产生了一个疑问,什么是reduced form?是分子小于分母的意思吗? 但是根据给出的答案,并不 ...