【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 ...
随机推荐
- vue全家桶(4.2)
5.2.使用vuex重构上面代码 Vuex是什么?官方定义:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测 ...
- Elasticsearch从入门到放弃:分词器初印象
Elasticsearch 系列回来了,先给因为这个系列关注我的同学说声抱歉,拖了这么久才回来,这个系列虽然叫「Elasticsearch 从入门到放弃」,但只有三篇就放弃还是有点过分的,所以还是回来 ...
- 【经验】GaussDB(for MySQL)性能优化 —— 日志的“快递驿站”
GaussDB(for MySQL)数据库在写入性能上,在业界同类产品中是最好的,这主要得益于GaussDB(for MySQL)在MySQL内核方面的诸多优化.其中有一项从“送快递”得来灵感的优化— ...
- 简易的java爬虫项目
简易的java爬虫项目 本项目仅供java新手学习交流,由于本人也是一名java初学者,所以项目中也有很多不规范的地方,希望各位高手不吝赐教,在评论区指出我的不足,我会虚心学习: 成果预览: 在开始讲 ...
- flex布局语法+实例
一.什么是flex布局 flex 是 flexible box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为 flex 布局.你可以将前端页 ...
- 基于tcp/udp协议的套接字通信
目录 一.套接字分类 二.套接字的工作流程 三.基于tcp协议的套接字 四.基于udp协议的套接字 一.套接字分类 1.基于文件类型的套接字家族:AF_UNIX 2.基于网络类型的套接字家族:AF_I ...
- 三分钟了解 Python3 的异步 Web 框架 FastAPI
快速编码,功能完善.从启动到部署,实例详解异步 py3 框架选择 FastAPI 的原因. FastAPI 介绍 FastAPI 与其它 Python-Web 框架的区别 在 FastAPI 之前,P ...
- day39 进程
目录 一.进程对象的其他方法 二.僵尸进程与孤儿进程(了解) 1 僵尸进程 2 孤儿进程 三.守护进程 四.互斥锁 五.进程间通信 六.IPC机制 七.生产者消费者模型 八.线程理论 一.进程对象的其 ...
- Scala 面向对象(一):类与对象基础(一)
1 如何定义类 [修饰符] class 类名 { 类体 } 定义类的注意事项 1)scala语法中,类并不声明为public,所有这些类都具有公有可见性(即默认就是public), 2)一个Scala ...
- JVM 专题十五:执行引擎
1. 执行引擎概述 1.1 执行引擎 1.2 概述 执行引擎是Java虚拟机的核心组成部分之一. 虚拟机是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处 ...