小白兔晒黑了

导航

 

1 默认auth登录快速创建

1.1 数据表的建立

.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=root
DB_PASSWORD=123456
View Code

创建表

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');
    }
}
View Code

 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
    }
View Code

 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>
View Code

方式一(不推荐):

\app\Http\Controllers\Auth\LoginController.php

添加

    //修改认证字段
    public  function username()
    {
        return 'name';
    }
View Code

方式二(推荐):

\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';
    }
}
View Code

\app\Http\Controllers\Auth\LoginController.php 修改

//use Illuminate\Foundation\Auth\AuthenticatesUsers;
use App\Traits\AuthenticatesUsers;
View Code

 2.4 用中间件添加认证

登录时才能访问,否则会跳到登录页面

方式一:写在路由里routes\web.php

Route::get('/profile',function (){
    return '111';
})->middleware('auth');
View Code

方式二:写在控制器里app\Http\Controllers\StudentController.php

 这个控制器里所有的方法都需要经过认证

 //这个控制器里所有的方法都需要经过认证
    public function __construct()
    {
        $this->middleware('auth');
    }
View Code
这个控制器里所有的方法都需要经过认证,除了create
 //这个控制器里所有的方法都需要经过认证,除了create
    public function __construct()
    {
        $this->middleware('auth')->except('create');
    }
View Code

这个控制器里create 、delete的方法都需要经过认证

//这个控制器里create 、delete的方法都需要经过认证
    public function __construct()
    {
        $this->middleware('auth')->only(['create','delete']);
    }
View Code

2.5 无登录页面,利用弹窗请求认证用户

 使用auth.basic中间件

Route::get('/profile',function (Request $request){
    return '111';
})->middleware('auth.basic');
View Code

修改 验证字段\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);
    }
View Code

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' => '登录成功']);
}
View Code

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/

posted on 2021-04-14 02:22  小白兔晒黑了  阅读(210)  评论(0编辑  收藏  举报