模型

如果某个模型类需要用于认证,必须继承自 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】用户认证之----手动认证用户的更多相关文章

  1. Django - 用户认证、用户组、用户权限

    https://www.cnblogs.com/ccorz/p/6358074.html auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理. auth可以和a ...

  2. Django自定义用户认证系统之自定义用户模型

    参考文档:http://python.usyiyi.cn/django/topics/auth/customizing.html Django 自带的认证系统足够应付大多数情况,但你或许不打算使用现成 ...

  3. "用户增长"--快速身份认证实现用户增长的技术和产品方案

    "用户增长"--快速身份认证实现用户增长的技术和产品方案 1   引言 作为一个互联网产品,用户量的增长是一个非常重要的衡量指标. 这是一个集合了销售,市场,运营,技术的综合能力. ...

  4. 基于FormsAuthentication的用户、角色身份认证

    一般情况下,在我们做访问权限管理的时候,会把用户的正确登录后的基本信息保存在Session中,以后用户每次请求页面或接口数据的时候,拿到 Session中存储的用户基本信息,查看比较他有没有登录和能否 ...

  5. Nginx实战之让用户通过用户名密码认证访问web站点

    1.Nginx实战之让用户通过用户名密码认证访问web站点 [root@master ~]# vim /usr/local/nginx/conf/extra/www.conf server { lis ...

  6. CentOS6.5下搭建ftp服务器(三种认证模式:匿名用户、本地用户、虚拟用户)

    CentOS 6.5下搭建ftp服务器 vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费,此 ...

  7. psql: 致命错误: 对用户"user1"的对等认证失败

    操作系统:Debian8 登录pg时可能会有提示错误: $ psql -U user1 -d exampledb psql: 致命错误: 对用户"user1"的对等认证失败 打开以 ...

  8. ASP.NET Core的身份认证框架IdentityServer4--(5)自定义用户登录(通过接口登录,无UI版本)

    官网接口详解文档地址:文档地址 (PS:可通过接口名称搜索相应接口信息.) 源码地址:https://github.com/YANGKANG01/IdentityServer4-IdentityAut ...

  9. Cognos权限认证CJP方式之用户密码加密

    在项目开发过程中,用户往往对系统的安全都有明确的要求,下面针对cognos门户认证用户密码如何加密来提供一个简单的wf 1Cognos权限认证方式:CJP 2Cognos用户数据库类型:Oracle ...

随机推荐

  1. CListBOX 用法

    ListBox的操作比较简单: 1添加数据 声明控件变量的类别为Control,变量类型为CListBox,变量名为m_ListBox_Content. m_ListBox_Content.AddSt ...

  2. 编译Spring5.2.0源码

    下载 spring-framework-5.2.0.RELEASE.zip https://github.com/spring-projects/spring-framework/releases 下 ...

  3. navicat连接vagrant中的数据库

  4. 基本数据类型--------------------集合set()

    一.作用:集合.list.tuple.dict一样都可以存放多个值,但是集合主要用于:关系运算.去重 # 1.1 关系运算 friends1 = ["zero","kev ...

  5. day04总结

    print("陈少最帅!!!") 输出结果: 陈少最帅!!! 可以变,不可变数据类型#1.可变类型:list,dict#在值改变的情况下,id号不变,也就是说内存地址不变,证明就是 ...

  6. day69 cookie与session

    目录 一.forms源码解析 二.cookie与session发展史 三.cookie操作 四.session操作 五.CBV如何添加装饰器 一.forms源码解析 # from组件的切入点是is_v ...

  7. 安装更强大更美观的zsh,配置oh my zsh及插件

    安装更强大更美观的zsh,配置oh my zsh及插件 #0x0 安装zsh #0x1 安装oh my zsh #0x2 配置zshrc #0x3 配置主题 #0x4 安装插件 #0x5 小结 #0x ...

  8. (一)pandas的两种对象

    将鱼图像数据进行操作,使用numpy知识 import numpy as np import matplotlib.pyplot as plt %matplotlib inline #咱们可以不用sh ...

  9. python os 模块的使用

    1.显示当前文件的绝对路径: os.path.abspath(__file__) 2.显示当前文件父目录的路径 os.path.dirname(os.path.abspath(__file__name ...

  10. 数据可视化之powerBI基础(十二)PowerBI导入Excel数据有哪几种方式?

    https://zhuanlan.zhihu.com/p/64999937 Excel作为使用最频繁.应用最广泛.用户最庞大的数据处理工具,当然也应该是PowerBI最常用的数据获取方式,本文介绍一下 ...