1 默认auth登录快速创建
1.1 数据表的建立
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=homestead DB_USERNAME=root DB_PASSWORD=123456
创建表
php artisan migrate
1.2 安装前端脚手架
// 生成基本脚手架... php artisan ui bootstrap php artisan ui vue php artisan ui react // 生成 登陆/注册 脚手架... php artisan ui bootstrap --auth php artisan ui vue --auth php artisan ui react --auth
1.3 我用vue 所以还要编译
npm install
npm run dev
需先升级nodejs版本到 v12.14 (windows版升级流程 与linux版升级方法不同)
看到这个页面说明成功了
1.4 定义路由
\app\Providers\RouteServiceProvider.php
public const HOME = '/home';
2 使用
2.1 基础操作 获取登录后的基础信息
<?php namespace App\Http\Controllers; //use Dingo\Api\Auth\Auth; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class HomeController extends Controller { /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('auth'); } /** * Show the application dashboard. * * @return \Illuminate\Contracts\Support\Renderable */ public function index() { //判断当前用户是未登录, //登录情况下返回true Auth::check(); // 判断当前用户是未登录 ,与 check() 相反 //登录情况下返回false Auth::guest(); //当前看守器 在\config\auth.php里配置 //Illuminate\Auth\SessionGuard 对象 Auth::guard(); //获取当前的认证用户 //App\User对象 未登录返回null $user = Auth::user(); if($user){ Auth::user()->name; //未登录情况下报错 Auth::user()->id; //未登录情况下报错 Auth::user()->password; //未登录情况下报错 Auth::user()->remember_token; //未登录情况下报错 Auth::user()->created_at;//未登录情况下报错 Auth::user()->updated_at;//未登录情况下报错 Auth::id(); //获取当前的认证用户的id (未登录情况下会报错) } //手动登录,第二个参数true就是记住我 Auth::attempt([ 'email'=>$email, 'password'=>$password ],true); //登录一个指定的用户到应用上 Auth::login(User::find(1),$remember=false); //退出当前登录用户 Auth::logout(); return view('home'); } }
2.2 修改跳转地址
\app\Http\Controllers\Auth\LoginController.php
\app\Http\Controllers\Auth\RegisterController.php
\app\Http\Controllers\Auth\ResetPasswordController.php
\app\Http\Controllers\Auth\ConfirmPasswordController.php
\app\Http\Controllers\Auth\VerificationController.php
/** * Where to redirect users after login. * * @var string */ //方式一:用属性跳转 //默认跳转到home //protected $redirectTo = RouteServiceProvider::HOME; //跳转到/ protected $redirectTo = '/'; //方式二:用方法跳转 //方法的优先级高于属性定义 protected function redirectTo() { //return '/home'; //方式2.1 return route('home'); //方式2.2 }
2.3 修改认证字段
外国人喜欢用email登录,中国人用username
修改 \resources\views\auth\login.blade.php
{{--<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>--}} <label for="name" class="col-md-4 col-form-label text-md-right">{{ __('用户名') }} </label> <div class="col-md-6"> {{--<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>--}} <input id="name" type="text" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus>
方式一(不推荐):
\app\Http\Controllers\Auth\LoginController.php
添加
//修改认证字段 public function username() { return 'name'; }
方式二(推荐):
\app\Traits\AuthenticatesUsers.php
<?php /** * Created by PhpStorm. * User: SUN * Date: 2021/4/20 * Time: 2:24 */ namespace App\Traits; use Illuminate\Foundation\Auth\AuthenticatesUsers as LaravelAuthenticatesUsers; trait AuthenticatesUsers{ use LaravelAuthenticatesUsers; public function username() { return 'name'; } }
\app\Http\Controllers\Auth\LoginController.php 修改
//use Illuminate\Foundation\Auth\AuthenticatesUsers; use App\Traits\AuthenticatesUsers;
2.4 用中间件添加认证
登录时才能访问,否则会跳到登录页面
方式一:写在路由里routes\web.php
Route::get('/profile',function (){ return '111'; })->middleware('auth');
方式二:写在控制器里app\Http\Controllers\StudentController.php
这个控制器里所有的方法都需要经过认证
//这个控制器里所有的方法都需要经过认证 public function __construct() { $this->middleware('auth'); }
//这个控制器里所有的方法都需要经过认证,除了create public function __construct() { $this->middleware('auth')->except('create'); }
这个控制器里create 、delete的方法都需要经过认证
//这个控制器里create 、delete的方法都需要经过认证 public function __construct() { $this->middleware('auth')->only(['create','delete']); }
2.5 无登录页面,利用弹窗请求认证用户
使用auth.basic中间件
Route::get('/profile',function (Request $request){ return '111'; })->middleware('auth.basic');
修改 验证字段\vendor\laravel\framework\src\Illuminate\Auth\Middleware\AuthenticateWithBasicAuth.php
public function handle($request, Closure $next, $guard = null, $field = null) { //$this->auth->guard($guard)->basic($field ?: 'email'); $this->auth->guard($guard)->basic($field ?: 'name'); return $next($request); }
2.6 单设备登录
如果在火狐登录了,Chrome就会退出
\vendor\laravel\framework\src\Illuminate\Auth\Middleware\AuthenticateWithBasicAuth.php
这行注释打开
//\Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\Session\Middleware\AuthenticateSession::class,
修改authenticated方法
Illuminate\Foundation\Auth\AuthenticatesUsers
protected function authenticated(Request $request, $user) { $this->guard()->logoutOtherDevices($request->password); return response()->json(['message' => '登录成功']); }
3 其他认证
Laravel 7 用户认证 Auth ——内置的API认证
Laravel 7 用户认证 Auth ——Passport密码模式认证
Laravel 7 用户认证 Auth ——Passport授权码模式认证
4 参考资料
https://www.qianjinyike.com/laravel-%e5%86%85%e7%bd%ae-web-%e8%ae%a4%e8%af%81/