【laravel】用户认证之----手动认证用户
模型
如果某个模型类需要用于认证,必须继承自 Illuminate\Foundation\Auth\User
基类,否则会报错。然后在这个模型类中使用 Notifiable
Trait,里面提供了用户发送通知的相关方法。配置 $hidden
属性,在返回查询结果的时候将敏感信息过滤掉,避免安全隐患。
<?php namespace App\Models; use Illuminate\Foundation\Auth\User;
use Illuminate\Notifications\Notifiable; class Manager extends User
{
use Notifiable; protected $hidden = ['password', 'remember_token'];
}
手动认证:attempt
public function login(Request $request)
{
$rs = \Auth::guard('admin')->attempt($request->only(['email', 'password']));
if ($rs) {
return redirect()->intended('dashboard');
}
}
attempt
方法接受一个键值对数组作为其第一个参数。数组中的值将被用于在数据表中查找用户。所以,在上例中,用户将通过 email
字段的值进行检索。如果找到了这个用户,数据库中保存的哈希密码将被用来与传递给方法的数组中 password
的哈希值进行比较。你不应该将指定为密码的 password
的值进行哈希操作,因为框架将在比较前,自动对其进行hash操作。如果这两个哈希密码匹配,就会为用户开启一个已认证的会话。
如果认证成功那么 attempt
方法将返回 true
。反之,会返回 false
。
重定向器上的 intended
方法将重定向用户到他们曾经希望访问的 URL,这个 URL 之前被用户认证中间件拦截了。可以给这个方法传递一个回退 URI,用于预期的地址不可用的情况。
记住用户
如果想在应用中提供「记住我」的功能 ,你可以给 attempt
方法的第二个参数传入一个布尔值,这将永久保持用户的认证状态,或者直到他们手动注销登录。当然,你的用户表必须包含名为 remember_token
的字符串字段,它将被用于保存「记住我」的令牌。
if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) {
// 这个用户被记住了...
}
如果你启用了「记住」用户,你可以使用 viaRemember
方法确定用户是否正使用「记住我」的cookie令牌进行的认证
if (Auth::viaRemember()) {
//
}
注销登录
要将用户从应用中注销,你可以使用 Auth
门面上的 logout
方法。这将清除用户会话中的认证信息:
Auth::logout();
其它认证方式
通过用户实例登入应用
如果你需要把现存的用户实例登入应用, 你可以调用 login
方法并附带用户实例作为参数。给定的这个对象必须实现 Illuminate\Contracts\Auth\Authenticatable
契约,或者继承自Illuminate\Foundation\Auth\User基类。
Auth::login($user); // 登录并且「记住」给定的用户...
Auth::login($user, true);
通过 ID 验证用户
要使用用户的 ID 登录应用,你可以使用 loginUsingId
方法。这个方法接受需要认证的用户主键:
Auth::loginUsingId(1); // 登录并且「记住」给定的用户...
Auth::loginUsingId(1, true);
仅验证用户一次
你可以在单次请求中使用 once
方法将用户登录到应用中。这将不会使用任何 Session 或者 Cookie,这意味着在构建无状态API时,此方法可能会有所帮助:
if (Auth::once($credentials)) {
//
}
让其它设备上的 Session 失效
Laravel 还提供了一种机制,用于将其它设备上的用户 Session 失效和「注销」,而不会使其当前设备上的 Session 失效。首先,你需要保证Illuminate\Session\Middleware\AuthenticateSession
中间件在你的app/Http/Kernel.php
类中的 web
中间件组中,并且没有被注释掉:
'web' => [
// ...
\Illuminate\Session\Middleware\AuthenticateSession::class,
// ...
],
然后, 你就可以使用 Auth
门面上的 logoutOtherDevices
方法。此方法要求用户提供其当前密码,你的应用程序应通过输入表单接受该密码:
use Illuminate\Support\Facades\Auth; Auth::logoutOtherDevices($password);
参考文档
官方文档:https://learnku.com/docs/laravel/5.7/authentication/2269#08b509
laravel学院:https://laravelacademy.org/post/9733.html
【laravel】用户认证之----手动认证用户的更多相关文章
- Django - 用户认证、用户组、用户权限
https://www.cnblogs.com/ccorz/p/6358074.html auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理. auth可以和a ...
- Django自定义用户认证系统之自定义用户模型
参考文档:http://python.usyiyi.cn/django/topics/auth/customizing.html Django 自带的认证系统足够应付大多数情况,但你或许不打算使用现成 ...
- "用户增长"--快速身份认证实现用户增长的技术和产品方案
"用户增长"--快速身份认证实现用户增长的技术和产品方案 1 引言 作为一个互联网产品,用户量的增长是一个非常重要的衡量指标. 这是一个集合了销售,市场,运营,技术的综合能力. ...
- 基于FormsAuthentication的用户、角色身份认证
一般情况下,在我们做访问权限管理的时候,会把用户的正确登录后的基本信息保存在Session中,以后用户每次请求页面或接口数据的时候,拿到 Session中存储的用户基本信息,查看比较他有没有登录和能否 ...
- Nginx实战之让用户通过用户名密码认证访问web站点
1.Nginx实战之让用户通过用户名密码认证访问web站点 [root@master ~]# vim /usr/local/nginx/conf/extra/www.conf server { lis ...
- CentOS6.5下搭建ftp服务器(三种认证模式:匿名用户、本地用户、虚拟用户)
CentOS 6.5下搭建ftp服务器 vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费,此 ...
- psql: 致命错误: 对用户"user1"的对等认证失败
操作系统:Debian8 登录pg时可能会有提示错误: $ psql -U user1 -d exampledb psql: 致命错误: 对用户"user1"的对等认证失败 打开以 ...
- ASP.NET Core的身份认证框架IdentityServer4--(5)自定义用户登录(通过接口登录,无UI版本)
官网接口详解文档地址:文档地址 (PS:可通过接口名称搜索相应接口信息.) 源码地址:https://github.com/YANGKANG01/IdentityServer4-IdentityAut ...
- Cognos权限认证CJP方式之用户密码加密
在项目开发过程中,用户往往对系统的安全都有明确的要求,下面针对cognos门户认证用户密码如何加密来提供一个简单的wf 1Cognos权限认证方式:CJP 2Cognos用户数据库类型:Oracle ...
随机推荐
- CListBOX 用法
ListBox的操作比较简单: 1添加数据 声明控件变量的类别为Control,变量类型为CListBox,变量名为m_ListBox_Content. m_ListBox_Content.AddSt ...
- 编译Spring5.2.0源码
下载 spring-framework-5.2.0.RELEASE.zip https://github.com/spring-projects/spring-framework/releases 下 ...
- navicat连接vagrant中的数据库
- 基本数据类型--------------------集合set()
一.作用:集合.list.tuple.dict一样都可以存放多个值,但是集合主要用于:关系运算.去重 # 1.1 关系运算 friends1 = ["zero","kev ...
- day04总结
print("陈少最帅!!!") 输出结果: 陈少最帅!!! 可以变,不可变数据类型#1.可变类型:list,dict#在值改变的情况下,id号不变,也就是说内存地址不变,证明就是 ...
- day69 cookie与session
目录 一.forms源码解析 二.cookie与session发展史 三.cookie操作 四.session操作 五.CBV如何添加装饰器 一.forms源码解析 # from组件的切入点是is_v ...
- 安装更强大更美观的zsh,配置oh my zsh及插件
安装更强大更美观的zsh,配置oh my zsh及插件 #0x0 安装zsh #0x1 安装oh my zsh #0x2 配置zshrc #0x3 配置主题 #0x4 安装插件 #0x5 小结 #0x ...
- (一)pandas的两种对象
将鱼图像数据进行操作,使用numpy知识 import numpy as np import matplotlib.pyplot as plt %matplotlib inline #咱们可以不用sh ...
- python os 模块的使用
1.显示当前文件的绝对路径: os.path.abspath(__file__) 2.显示当前文件父目录的路径 os.path.dirname(os.path.abspath(__file__name ...
- 数据可视化之powerBI基础(十二)PowerBI导入Excel数据有哪几种方式?
https://zhuanlan.zhihu.com/p/64999937 Excel作为使用最频繁.应用最广泛.用户最庞大的数据处理工具,当然也应该是PowerBI最常用的数据获取方式,本文介绍一下 ...