laravel5.5用户认证
1. 命令
php artisan make:auth # 生成文件和配置
php artisan migrate # 创建数据表
以上命令主要做了几件事
- route/web.php中增加了路由配置
- resources/views/auth和resources/views/layouts创建了视图文件
2. 快速认证
主要涉及到Controllers\Auth下面的文件
打开文件你可能会发现里面并没有定位各种方法,也没有继承关系,但是有使用trait,你可以看到use xxxx;这句话,打开相应文件会发现别有洞天。
2.1 自定义路径
当用户成功通过身份认证后,他们会被重定向到 /home URI。你可以通过在 LoginController、RegisterController 和 ResetPasswordController中设置 redirectTo 属性来自定义重定向的位置:
protected $redirectTo = '/';
如果重定向路径需要自定义生成逻辑,你可以定义 redirectTo 方法来代替 redirectTo 属性:
protected function redirectTo()
{
return '/path';
}
{tip} redirectTo 方法优先于 redirectTo 属性。
2.2 自定义用户名
Laravel 默认使用 email 字段来认证。如果你想用其他字段认证,可以在 LoginController 里面定义一个 username 方法:
public function username()
{
return 'username';
}
2.3 自定义看守器
你还可以自定义用于认证和注册用户的「看守器」。要实现这一功能,需要在 LoginController、RegisterController 和 ResetPasswordController 中定义 guard 方法。该方法需要返回一个看守器实例:
use Illuminate\Support\Facades\Auth;
protected function guard()
{
return Auth::guard('guard-name');
}
2.4 自定义验证/存储
要修改新用户在应用注册时所需的表单字段,或者自定义如何将新用户存储到数据库中,你可以修改 RegisterController 类。该类负责验证和创建应用的新用户。
RegisterController 的 validator 方法包含了应用验证新用户的规则,你可以按需要自定义该方法。
RegisterController 的 create 方法负责使用 Eloquent ORM 在数据库中创建新的 App\User 记录。你可以根据数据库的需要自定义该方法。
2.5 Auth::xx()
你可以通过 Auth facade 来访问认证的用户:
use Illuminate\Support\Facades\Auth;
// 获取当前已认证的用户...
$user = Auth::user();
// 获取当前已认证的用户 ID...
$id = Auth::id();
//是否认证
Auth::check()
2.6 保护路由
路由中间件 用于只允许通过认证的用户访问指定的路由。Laravel 自带了在 Illuminate\Auth\Middleware\Authenticate 中定义的 auth 中间件。由于这个中间件已经在 HTTP 内核中注册,所以只需要将中间件附加到路由定义中:
Route::get('profile', function () {
// 只有认证过的用户可以...
})->middleware('auth');
当然,如果使用 控制器,则可以在构造器中调用 middleware 方法来代替在路由中直接定义:
public function __construct()
{
$this->middleware('auth');
}
2.7 指定看守器
将 auth 中间件添加到路由时,还需要指定使用哪个看守器来认证用户。指定的看守器对应配置文件 auth.php 中 guards 数组的某个键:
public function __construct()
{
$this->middleware('auth:api');
}
3 手动认证用户
3.1 不使用Controllers\Auth里面的控制器,自己直接调用认证类进行用户验证
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller
{
/**
* 处理身份认证尝试.
*
* @return Response
*/
public function authenticate()
{
if (Auth::attempt(['email' => $email, 'password' => $password])) {
// 认证通过...
return redirect()->intended('dashboard');
}
}
}
- attempt 方法会接受一个键值对数组作为其第一个参数。这个数组的值将用来在数据库表中查找用户,如果匹配则返回true,否则返回false
- 重定向器上的 intended 方法将重定向到用户尝试访问的 URL。如果该 URL 无效,会给该方法传递回退 URI。
3.2 指定额外条件
除了用户的电子邮件和密码之外,你还可以向身份验证查询添加额外的条件。例如,我们可能会验证用户是否被标记为「活动」状态:
if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
// 用户处于活动状态,不被暂停,并且存在。
}
3.3 访问指定的看守器实例
可以通过 Auth facade 的 guard 方法来指定要使用哪个看守器实例。这允许你使用完全独立的可认证模型或用户表来管理应用的抽离出来的身份验证。
传递给 guard 方法的看守器名称应该与 auth.php 配置文件中 guards 中的其中一个值相对应:
if (Auth::guard('admin')->attempt($credentials)) {
//
}
3.4 注销用户
要让用户从应用中注销,可以在 Auth facade 上使用 logout 方法。这会清除用户会话中的身份验证信息:
Auth::logout();
3.5 记住用户
如果你想要在应用中提供「记住我」的功能 , 则可以传递一个布尔值作为 attempt 方法的第二个参数,这会使在用户手动注销前一直保持已验证状态。当然,users 数据表必须包含 remember_token 字段,这是用来保存「记住我」的令牌。
if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) {
// 这个用户被记住了...
}
{tip} 如果你使用 Laravel 内置的 LoginController,则「记住」用户的逻辑已经由控制器使用的 traits 来实现。
如果你「记住」用户,可以使用 viaRemember 方法来检查这个用户是否使用「记住我」 cookie 进行认证:
if (Auth::viaRemember()) {
//
}
3.6其它认证方法
- 验证用户实例
如果需要将现有用户实例记录到应用,可以使用用户实例调用 login 方法。给定的对象必须实现了 Illuminate\Contracts\Auth\Authenticatable 契约 。当然,Laravel 自带的 App\User 模型已经实现了这个接口:
Auth::login($user);
// 登录并且「记住」给定用户...
Auth::login($user, true);
当然,你也可以指定要使用的看守器实例:
Auth::guard('admin')->login($user);
- 通过 ID 验证用户
你可以使用 loginUsingId 方法通过其 ID 将用户记录到应用中。这个方法只接受要验证的用户的主键:
Auth::loginUsingId(1);
//登录并且「记住」给定的用户...
Auth::loginUsingId(1, true);
- 仅验证用户一次
你可以使用 once 方法将用户记录到单个请求的应用中。不会使用任何会话或 cookies, 这个对于构建无状态的 API 非常的有用:
if (Auth::once($credentials)) {
//
}
laravel5.5用户认证的更多相关文章
- laravel5.5用户认证源码分析
目录 1. 生成相关文件和配置 2. 分析路由文件 3. 以登陆开始为例,分析auth到底是怎么工作的 3.1 分析登录文件 3.2 分析门面Auth. 1. 生成相关文件和配置 快速生成命令 php ...
- Nodejs之MEAN栈开发(八)---- 用户认证与会话管理详解
用户认证与会话管理基本上是每个网站必备的一个功能.在Asp.net下做的比较多,大体的思路都是先根据用户提供的用户名和密码到数据库找到用户信息,然后校验,校验成功之后记住用户的姓名和相关信息,这个信息 ...
- Django--自定义用户认证
Django自带的用户认证 以前都是用Django自带的用户认证,用户名字段一对一关系对应Django--User表(其实它也是继承了abstractbaseuser). 1 2 3 from dja ...
- linux(十二)___Apache服务器用户认证、虚拟主机的配置
创建xiangkejin zhangsan两个用户 可看见文件中创建的两个用户: 建立虚拟目录并配置用户认证 ①建立虚拟目录 /xiangkejin ②在Apache的主配置文件httpd.conf ...
- [django]用户认证中只允许登陆用户访问(网页安全问题)
当设计一个重要网页时,一般要求未从登陆界面访问的用户不能进入其他页面,那么需要如何设置呢? 如下 django中的url.py urlpatterns = [ url(r'^$', 'login ...
- 使用JDBC实现Oracle用户认证
两天时间写的小品,以前的J2EE环境基本使用框架.现在使用JDBC配合Oracle存储过程模拟了一下用户注册和用户认证. 一.添加必须的jar包 需要JDBC连接Oracle的包和shiro-core ...
- ldap实现用户认证
LDAP的用户认证类. public class LDAPHelper { private DirectoryEntry _objDirectoryEntry; /// <summary> ...
- auth用户认证库
关于auth库,建议如下:1. ion_auth,基于Redux重写而成,非常不错的认证库,国外用的很多,几个最新的ci2.0.2基础上的开源系统(如doveforum)都用它,支持ci 2.0和以上 ...
- 禅道PMS兼容redmine用户认证接口
项目地址:https://github.com/web3d/zentao-redmine-userauth zentao-redmine-userauth 做了一个基本的用户认证接口,兼容redmin ...
随机推荐
- RabbitMQ的用户管理方法
1. 用户管理用户管理包括增加用户,删除用户,查看用户列表,修改用户密码.相应的命令 (1) 新增一个用户 rabbitmqctl add_user Username Password (2) ...
- c++为什么定义了析构函数的类的operator new[]传入的参数会多4字节?
问题: 在网上看人写了这么一段代码: class A { public: A() { std::cout<<"call A constructor"<< ...
- 【JavaScript 封装库】Prototype 原型版发布!
/* 源码作者: 石不易(Louis Shi) 联系方式: http://www.shibuyi.net =============================================== ...
- 是否应该提供一个dao.insertIgnoreNull ? (像updateIgnoreNull一样)
是否应该提供一个dao.insertIgnoreNull ? (像updateIgnoreNull一样) 发布于 406天前 作者 SayingCode 153 次浏览 复制 上一个帖子 ...
- react里面Fragments的使用
关于react Fragments,React 中一个常见模式是为一个组件返回多个元素.Fragments 可以让你聚合一个子元素列表,并且不在DOM中增加额外节点. render() { retur ...
- ZooKeeper 完全分布式集群环境搭建
1. 搭建前准备 示例共三台主机,主机IP映射信息如下: 192.168.32.101 s1 192.168.32.102 s2 192.168.32.103 s3 2.下载ZooKeeper, 以 ...
- 3.初识Cron表达式
Cron: 计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思.在Linux中,我们经常用到 cron 服务器来完成这项工作.cron服务器可以根据配置文件约定的时间来执行特定的作务. ...
- checkboxlist 如何配置数据源?
<f:CheckBoxList runat="server" ColumnNumber="4" ColumnVertical="true&quo ...
- Delphi 编写DLL动态链接库文件的知识
一.DLL动态链接库文件的知识简介: Windows的发展要求允许同时运行的几个程序共享一组函数的单一拷贝.动态链接库就是在这种情况下出现的.动态链接库不用重复编译或链接,一旦装入内存,Dlls函数可 ...
- SVN中trunk,branches,tags用法详解(转载)
转载出处:http://www.cnblogs.com/dafozhang/archive/2012/06/28/2567769.html Subversion是一个自由开源的版本控制系统.在Subv ...