之前的初级教程主要是学习简单的增删改查; 
接着的中级教程的目标是在初级教程的基础上能写出更复杂更健壮的程序; 
我们先来学习 laravel 的用户认证功能; 
在现代网站中基本都有用户系统; 
而我们每开发一个网站就实现一遍用户系统想想也是挺心累的; 
还好 Laravel 已经贴心的帮我们完成了常用的用户认证功能; 
比如说 注册、登录、重置密码; 
并设计好了用户表 users ; 
编写了带有登录登出功能的 Auth 类; 
而且可以非常方便的进行扩展修改;
再个 Laravel 的用户系统跟其他功能比如 Passport 等结合也很紧密;
因此墙裂推荐使用 Laravel 的用户系统; 
要使用用户认证功能需要先运行命令行;

php artisan make:auth
Bash

通过 git 我们可以看到有这些文件发生了变化;

 

访问下 登录页面看看效果 /login ;

 

开发项目的时候一般不会使用默认的页面; 
如果需要更改页面结构或者样式; 
直接修改 resources/views/auth 目录下对应的文件即可; 
查看 web.php 可以发现增加了如下两行;

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');
PHP

执行 route:list 看下新增的路由;

php artisan route:list
Bash

 

如果修改视图文件已经不能满足你的需求了; 
我们还可以在 web.php 中定义路由来覆盖上图中的这些内容; 
或者直接覆盖控制器中的方法; 
在成功注册成功、登录成功、重置密码成功后默认都会重定向到 /home 页面; 
如果说想想在登录成功后重定向到个人中心 /user 页面; 
我可以修改 app/Http/Controllers/Auth/LoginController.php 文件中的 $redirectTo 属性;

 

甚至如果需要根据登录的用户的角色跳转到不同的页面;
Laravel 还预留了 redirectPath 方法; 
只需要在 app/Http/Controllers/Auth/LoginController.php 中自定义 redirectPath 方法即可;

/**
* 可以根据逻辑判断自定义跳转链接
*/
public function redirectPath()
{ }
PHP

在国内很多时候我们都是选择使用手机号登录的; 
那么我们可以在 users 表中增加 phone 列; 
然后参考图中的 AuthenticatesUsers trait 的 login 方法;

 

Auth 也提供了 attempt 方法用来认证用户;

\Auth::attempt(['phone' => '***', 'password' => '123456'])
PHP

当登录成功后会向 session 中存储登录的用户id ; 
我们注册一个用户并登录; 
然后在 app/Http/Controllers/HomeController.php 的 index 中打印下 session 看下;

public function index()
{
dump(session()->all());
return view('home');
}
PHP

访问 /home 页面;

 

这个 login_web_59ba36addc2b2f9401580f014c7f58ea4e30989d 明显不是一个固定 key ; 
我们如果想获取登录的用户 id 可以通过下面这个方式;

$userId = Auth::id();
PHP

如果说想获取包括用户名等完整的用户信息则可以这样;

$user = Auth::user();
PHP

修改下 app/Http/Controllers/HomeController.php 的 index 再打印;

public function index()
{
dump(session()->all());
dump(\Auth::id());
dump(\Auth::user());
return view('home');
}
PHP

 

很多网站都是分成面向普通用户的前台和给管理员用的后台的; 
这种情况下我们可以自定义多套用户体系 guard; 
比如说我的博客就分为不需要注册直接使用第三方平台的 oauth 和不允许注册的后台管理 admin ; 
auth.php

'guards' => [
'admin' => [
'driver' => 'session',
'provider' => 'users',
], 'oauth' => [
'driver' => 'session',
'provider' => 'oauth',
],
], 'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
], 'oauth' => [
'driver' => 'eloquent',
'model' => App\Models\OauthUser::class,
],
],
PHP

guard 的用法可以参考我的博客源代码; https://github.com/baijunyao/laravel-bjyblog 
这里就不多讲了;
吸取初级教程的教训;
中级教程一开始就把代码按章节推送到 github 上供童鞋们参考;
链接在这里: https://github.com/baijunyao/laravel-course

最适合入门的Laravel中级教程(二)用户认证的更多相关文章

  1. 最适合入门的Laravel中级教程(一)

    Laravel 是一个全栈框架: 我们使用 Laravel 开发业务常见有 3 个方向: 前端页面和后端逻辑混合的应用 主要是面向对 SEO 有需求的项目: 比如说新闻资讯博客文章等: 一般在控制器中 ...

  2. 最适合入门的Laravel中级教程(四)前端开发

    Laravel 使用 npm 安装前端依赖: npm 是一个类似 composer 的工具: 用于管理前端的各种依赖包: 在使用之前需要先安装 node : Windows 下可以在官网下载安装: h ...

  3. 最适合入门的Laravel中级教程(三)表单验证

    做开发有个原则是永远不能信任用户输入的数据: 即便前端已经做了验证: 在后端 php 也必须要再次验证: laravel 为表单验证提供了强大且简单的方案: 创建示例路由: routes/web.ph ...

  4. Laravel核心解读 -- 扩展用户认证系统

    扩展用户认证系统 上一节我们介绍了Laravel Auth系统实现的一些细节知道了Laravel是如何应用看守器和用户提供器来进行用户认证的,但是针对我们自己开发的项目或多或少地我们都会需要在自带的看 ...

  5. Laravel初级教程浅显易懂适合入门

    整理了一些Laravel初级教程,浅显易懂,特适合入门,留给刚学习laravel想快速上手有需要的朋友 最适合入门的laravel初级教程(一)序言 最适合入门的laravel初级教程(二)安装使用 ...

  6. Laravel 5 系列入门教程(一)【最适合中国人的 Laravel 教程】

    Laravel 5 系列入门教程(一)[最适合中国人的 Laravel 教程] 分享⋅ johnlui⋅ 于 2年前 ⋅ 最后回复由 skys215于 11个月前 ⋅ 17543 阅读   原文发表在 ...

  7. Laravel 从入门到精通系列教程

    转载;https://laravelacademy.org/laravel-tutorial-5_7 适用于 Laravel 5.5.5.6.5.7 版本,本系列教程将围绕一个 LTS 版本,然后采取 ...

  8. 无废话ExtJs 入门教程二十一[继承:Extend]

    无废话ExtJs 入门教程二十一[继承:Extend] extjs技术交流,欢迎加群(201926085) 在开发中,我们在使用视图组件时,经常要设置宽度,高度,标题等属性.而这些属性可以通过“继承” ...

  9. 无废话ExtJs 入门教程二十[数据交互:AJAX]

    无废话ExtJs 入门教程二十[数据交互:AJAX] extjs技术交流,欢迎加群(521711109) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C ...

随机推荐

  1. ubuntu 升级 python3.5到 python3.6

    首先是在Ubuntu中安装python3.6 sudo apt-get install software-properties-common sudo add-apt-repository ppa:j ...

  2. 神州数码OSPF Stub(末梢区域)和Totally Stub(完全末梢区域)的配置

    实验要求:了解末梢区域及完全末梢区域的配置 拓扑如下 R1 enable 进入特权模式 config 进入全局模式 hostname R1 修改名称 interface l0 进入端口 ip addr ...

  3. 2018年3月底的PTA(二)

    C高级第二次PTA作业(1) 题目6-7 删除字符串中数字字符 1.设计思路 为了偷懒,本题算法和流程图是精简代码后的,具体请看本题实验代码的第二段代码. (1)算法(子函数) 第一步:定义子函数类型 ...

  4. Linux下查看CPU型号,内存大小,硬盘空间的命令(详解)

    1 查看CPU 1.1 查看CPU个数 # cat /proc/cpuinfo | grep "physical id" | uniq | wc -l 2 **uniq命令:删除重 ...

  5. 《Linux内核原理与分析》第五周作业

    课本:第4章 系统调用的三层机制(上) -用户态.内核态和中断 -用户态:在低的执行级别下,代码能够掌控的范围有所限制,只能访问部分内存. -内核态:在高的执行级别下,代码可以执行特权指令,访问任意的 ...

  6. Go Example--自定义排序

    package main import ( "fmt" "sort" ) //定义类型别名 type ByLength []string func (s ByL ...

  7. Head First 设计模式 (Eric Freeman / Elisabeth Freeman / Kathy Sierra / Bert Bates 著)

    1. 欢迎来到设计模式世界:设计模式入门 (已看) 策略模式 定义了算法族,分别分装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 设计原则 找出应用中可能需要变化之处,把它们 ...

  8. oracle-------window安装

    安装虚拟机(没难度,傻瓜装机) 然后右键左边  新建虚拟机 自定义------下一步------- 稍后安装操作系统------下一步 下一步 下一步 下一步 下一步,完成 然后启动,就可以启动一个系 ...

  9. PLC 通讯

    几个之前整理的高级语言与PLC通讯的资源下载链接:三菱:http://blog.sina.com.cn/s/blog_16d7d3ecb0102x6wj.html倍福:http://bbs.elecf ...

  10. Python小练习(一)

    1:有一个列表,其中包括10个元素,例如这个列表是[1,2,3,4,5,6,7,8,9,0],要求将列表中的每个元素一次向前移动一个位置,第一个元素到列表的最后,然后输出这个列表.最终样式是[2,3, ...