【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://www.cnblogs.com/jxl1996/p/10352395.html

时间: 2024-10-10 04:16:06

【laravel】用户认证之----手动认证用户的相关文章

在spring security手动 自定义 用户认证 SecurityContextHolder

1.Spring Security 目前支持认证一体化如下认证技术: HTTP BASIC authentication headers (一个基于IEFT  RFC 的标准) HTTP Digest authentication headers (一个基于IEFT  RFC 的标准) HTTP X.509 client certificate exchange  (一个基于IEFT RFC 的标准) LDAP (一个非常常见的跨平台认证需要做法,特别是在大环境) Form-based auth

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

一般情况下,在我们做访问权限管理的时候,会把用户的正确登录后的基本信息保存在Session中,以后用户每次请求页面或接口数据的时候,拿到 Session中存储的用户基本信息,查看比较他有没有登录和能否访问当前页面. Session的原理,也就是在服务器端生成一个SessionID对应了存储的用户数据,而SessionID存储在Cookie中,客户端以后每次请求都会带上这个 Cookie,服务器端根据Cookie中的SessionID找到存储在服务器端的对应当前用户的数据. FormsAuthen

psql: 致命错误: 对用户&quot;user1&quot;的对等认证失败

操作系统:Debian8 登录pg时可能会有提示错误: $ psql -U user1 -d exampledb psql: 致命错误: 对用户"user1"的对等认证失败 打开以下文件, $ sudo vi /etc/postgresql/9.4/main/pg_hba.conf # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only loca

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

在项目开发过程中,用户往往对系统的安全都有明确的要求,下面针对cognos门户认证用户密码如何加密来提供一个简单的wf 1Cognos权限认证方式:CJP 2Cognos用户数据库类型:Oracle 3用户密码加密方式:MD5 本文主要说一下大概的实现过程: a:加密方式采用md5,可以用Java代码来写方法实现,也可以在数据库中写方法,本例子采用在DB服务端写function的方法来处理md5加密问题 (1):为了方便大家,附上md5加密方法源码 CREATE OR REPLACE FUNCT

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

CentOS 6.5下搭建ftp服务器 vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费,此外,还具有很高的安全性.传输速度,以及支持虚拟用户验证等其他FTP服务程序不具备的特点,下面开始搭建: 1.用root 进入系统 2.使用命令 rpm  -qa | grep vsftpd 查看系统是否安装了ftp,若安装了vsftp,使用这个命令会在屏幕上显示vsftpd的版本 3.如果安装了,可

基于FormsAuthentication的用户、角色身份认证(转)

一般情况下,在我们做访问权限管理的时候,会把用户的正确登录后的基本信息保存在Session中,以后用户每次请求页面或接口数据的时候,拿到 Session中存储的用户基本信息,查看比较他有没有登录和能否访问当前页面. Session的原理,也就是在服务器端生成一个SessionID对应了存储的用户数据,而SessionID存储在Cookie中,客户端以后每次请求都会带上这个 Cookie,服务器端根据Cookie中的SessionID找到存储在服务器端的对应当前用户的数据. FormsAuthen

[ Laravel 5.5 文档 ] 处理用户请求 —— HTTP 请求的过滤器:中间件

[ Laravel 5.5 文档 ] 处理用户请求 -- HTTP 请求的过滤器:中间件 http://laravelacademy.org/post/7812.html 简介 中间件为过滤进入应用的 HTTP 请求提供了一套便利的机制.例如,Laravel 内置了一个中间件来验证用户是否经过认证(如登录),如果用户没有经过认证,中间件会将用户重定向到登录页面,而如果用户已经经过认证,中间件就会允许请求继续往前进入下一步操作. 当然,除了认证之外,中间件还可以被用来处理很多其它任务.比如:COR

Linux手动添加用户

手动添加用户 例:添加用户user1,基本组为user1,ID号为5000,附加组为mygroup 1.在/etc/group中添加 user1:x:5000: 在其附加组后加上其用户名 mygroup:x:504:user3,user1 2.在/etc/passwd中添加 user1:x:5000:5000:user1:/home/user1:/bin/bash 3.在/etc/shadow中添加 user1:!!:15765:0:99999:7::: 4.提供家目录 cp -r /etc/u

手动添加用户

需求:手动添加用户hive,基本组为hive ,id为5000, vi /etc/group: hive:x:5000: vi /etc/passwd: hive:x:5000:5000:Hive:/home/hive:/bin/bash vi /etc/shadow hive:!!:(date +%s)/86400:0:99999:7::: cp -r /etc/skel //home/hive chown -R hive.hive /home/hive chmod -R go=  /home