欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

laravel入门实战开发(五):自定义多字段登录,用户名,邮箱等

程序员文章站 2022-05-12 08:41:36
...
  • 上一节,我们完成了自定义登录,现在许多网站不光是用户名可以登录,邮箱、手机号都可以登录
  • 这一节,我们继续完善登录,实现多字段登录

在登录源码分析那一节,我们分析登录成功验证主要attemptLogin有关,我们来具体分析

protected function attemptLogin(Request $request)
{
    return $this->guard()->attempt(
        $this->credentials($request), $request->filled('remember')
    );
}
  1. guard()可以简单理解将使用那个用户库,有些系统会出现多种用户表的时候,如管理员,企业用户,普通用户
  2. attempt 将提交的登录数据与数据库中用户的数据比对,先查询用户名在比对密码,比对上返回true反则false
  • 在login方法中是通过true来判断是否登录成功
    我们按照这个思路,只需要将多个字段都进行比对,只要有一个比对上就返回true,都没匹配上就返回false
    默认的users表有name和email两个登录字段,当然我们也可以自己加入手机号等其他字段,这里就以name和email为例重写attemptLogin方法

如果已经登入可以清楚浏览器数据,也可以在测试控制器index中
return \Auth()->logout();再访问就退出了

<?php

namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{


    use AuthenticatesUsers;

    protected $redirectTo = '/admin';


    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    public function username()
    {
        return 'name';
    }

    public function showLoginForm()
    {
        return view('admin.auth.login');
    }

    public function attemptLogin(Request $request)
    {
        $username = $request->input('name');
        $password = $request->input('password');

        // 验证用户名登录方式
        $usernameLogin = $this->guard()->attempt(
            ['name' => $username, 'password' => $password], $request->filled('remember')
        );
        if ($usernameLogin) {
            return true;
        }
        // 验证邮箱登录方式
        $emailLogin = $this->guard()->attempt(
            ['email' => $username, 'password' => $password], $request->filled('remember')
        );
        if ($emailLogin) {
            return true;
        }

        return false;
    }

    public function logout(Request $request)
    {
        $this->guard()->logout();

        $request->session()->invalidate();

        return redirect('/admin/login');
    }

}

laravel入门实战开发(五):自定义多字段登录,用户名,邮箱等

laravel入门实战开发(五):自定义多字段登录,用户名,邮箱等

  • 到这里我们的多字段登录就已经完成了,下一节将加入验证码登录,验证码可以有效的防止机器操作,是一个有效的防护手段