Laravel 用户认证
来源:互联网 发布:es5 sham.js 编辑:程序博客网 时间:2024/06/05 07:07
看到本文标题的时候,可能有不少读者会表示不屑,因为这个都是官方文档以及网上许多教程说明过无数次的东西。但如果你有耐心继续读完的话,会发现我写的并不完全是官方文档所教的那些。
诚然,Laravel 被标榜为一个优雅的 PHP 框架,它有着十分高质的代码以及活跃的社区,同时他的文档也比较完备和规范。这里使用“比较”这个词的原因是,个人觉得官方文档需要对每个基本的方面都有说明,但一些部分并不详细,可能代码维护者对这套框架的受众(也就是我们)有着充分的信心,认为我们都有能力并有兴趣去探索官方文档没有细说的一些东西,就如代码里一些注释里所写的那样——Why don't you explore it?
进入本文正题,Laravel 有着强大的用户认证模块,通过合理的配置和几项简单的操作之后,即可实现用户登录、注册、重置密码等功能。而不需要我们写太多代码。具体的步骤官方文档里已经有了比较详细的说明了。但问题是,根据官方文档步骤操作之后得到的是默认的 Auth 控制器、中间件以及视图,而且使用Auth::route() 方法生成的路由也是指向这些默认操作的。这对于一般的简单应用确实是事半功倍,省却了不少麻烦,不过如果是比较大型的项目,同时涉及多个模块的认证操作,那就并不适用了。
比如在我自己的一个项目里,同时有手机端、PC端用户中心以及系统管理后台几个模块需要用到认证,这种情况下再按官方文档里的来显然是不大够用的。我需要为不同的模块使用不同的登录逻辑,中间件以及模板。这时候就需要自己动手了。
首先,就是添加路由分组,并为不同分组设置相应的中间件。至于中间件的写法,可以参考默认的Authenticate中间件,例如我的PC端用户中心的中间件代码如下:
<?phpnamespace App\Http\Middleware;use Closure;use Illuminate\Support\Facades\Auth;class UserAuthenticate{ /** * @var array */ protected $except = [ 'user/register', 'user/password', 'user/login', 'user/lock', ]; /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @param string|null $guard * @return mixed */ public function handle($request, Closure $next, $guard = null) { if ($this->shouldPassThrough($request)) { return $next($request); } if (Auth::guard($guard)->guest()) { if ($request->ajax()) { return response('Unauthorized.', 401); } else { return redirect()->guest('user/login'); } } return $next($request); } /** * Determine if the request has a URI that should pass through CSRF verification. * * @param \Illuminate\Http\Request $request * @return bool */ protected function shouldPassThrough($request) { foreach ($this->except as $except) { if ($except !== '/') { $except = trim($except, '/'); } if ($request->is($except)) { return true; } } return false; }}
这里有两点儿需要注意的就是,一是定义 $except 属性,包含需要过滤的几个 url,同时自己实现过滤的相关逻辑,这个可以参考 CSRF 中间件部分代码,即上面的shouldPassThrough相关代码。二是 return redirect()->guest('user/login') 中当未通过中间件时重定向的地址应该指向对应模块的登录地址。
然后仿造默认的 AuthController 编写对应模块的认证控制器。对于控制器中有几点需要说明的就是,因为我们需要对不同的需要使用不同的模板,登录之后也需要跳转到不同的页面,因此有如下几个属性需要我们自己定义,不然的话,出现的登录页面就是系统默认的那个了。
/** * Where to redirect users after login / registration. * * @var string */ protected $redirectTo = '/user'; /** * Where to redirect users after logout. * * @var string */ protected $redirectAfterLogout = '/'; /** * Login view. * * @var string */ protected $loginView = 'user.auth.login'; /** * Logout view. * * @var string */ protected $registerView = 'user.auth.register'; /** * Login via username. * * @var string */ protected $username = 'name';这些属性,注释中说明的已经比较清楚了,分别是登录成功之后的跳转地址、退出登录之后的跳转地址、登录视图、注册视图以及通过哪个字段登录,对于最后一个 $username 系统默认是通过 email 登录,而我我项目中使用的是用户名登录,所以如上图设置。
完成这些之后,再添加对应的视图文件,相关表单的字段名参考默认的认证视图文件就好了,当然可以根据自己的情况作些调整,例如添加额外的注册字段(对应的数据表、模型以及控制器需要调整),改变登录字段名为 email 或者 name。
一切准备就绪后,访问指定的路由,即会显示出登录、注册相关的页面了。最后放出我的登录页面。不同的模块可以使用不同的认证视图和控制器了。
- Laravel 用户认证
- Laravel的用户认证模块
- Laravel 用户认证体系详解
- laravel的用户认证系统-手动认证用户
- Laravel 5.3 不同用户表登录认证
- Laravel 5.3 不同用户表登录认证
- laravel的服务-用户认证
- Laravel中用户认证功能的实现
- Laravel注册、登陆及用户认证
- Laravel 中用户认证(Auth)
- laravel 使用JWT实现用户认证
- laravel 5.3用户认证--默认的用户表数据迁移
- [Laravel 5.2]二、注册、登陆及用户认证
- Laravel-使用中间件做用户认证和权限管理
- laravel 课程学习系列四----------------第四章.Laravel中的用户认证(Auth)
- Laravel 5 中使用 JWT(Json Web Token) 实现基于API的用户认证
- 用户认证
- 用户认证
- ubuntu 开始ssh服务 使用xshell工具连接
- Get和Post区别
- iOS面试题一
- C++交换两个变量的值
- J2SE五个常用类
- Laravel 用户认证
- 小故事:架构师需要做什么?
- iOS面试题二
- 无图片纯css实现中国象棋棋子
- 正则表达式
- 1034. 有理数四则运算
- python第一次学习笔记(简略)
- iptables: Firewall modules are not loaded.
- javascript中的BOM和DOM