美文网首页laravel
Laravel 实现用户名 + 邮箱 + 手机号登录

Laravel 实现用户名 + 邮箱 + 手机号登录

作者: charmingcheng | 来源:发表于2021-07-15 15:52 被阅读0次

视图中我将待验证字段命名为 account。

resources/views/auth/login.blade.php

<form action="{{ route('login') }}" method="post">
    {{ csrf_field() }}

    {{--账号--}}
    <div class="form-group has-feedback">
        <input type="text" name="account" class="form-control" placeholder="用户名/邮箱/手机号">
        <span class="glyphicon glyphicon-user form-control-feedback"></span>
        @if ($errors->has('account'))
             <span class="help-block" style="color: #d73925;">
                 <strong>{{ $errors->first('account') }}</strong>
             </span>
         @endif
    </div>
...
</form>

接下来在 LoginController.php 重写 AuthenticatesUsers trait 中的 attemptLogin()、validateLogin()、username()、三个方法。

attemptLogin() 方法:

return $this->guard()->attempt(
    $this->credentials($request), $request->filled('remember')
);

替换为

return collect(['username', 'email', 'phone'])->contains(function ($value) use ($request) {
    $account = $request->get($this->username());
    $password = $request->get('password');
    return $this->guard()->attempt([$value => $account, 'password' => $password], $request->filled('remember'));
});

validateLogin() 方法:

主要是将 $this->username() 改为中文。当然你还可以添加自己的验证规则。

protected function validateLogin(Request $request)
{
    $this->validate($request, [
        $this->username() => 'required|string',
        'password' => 'required|string',
        'captcha' => 'required|captcha',
    ],[
        'captcha.required' => ':attribute 不能为空',
        'captcha.captcha' => '请输入正确的 :attribute',
    ],[
        $this->username() => '账号',
        'captcha' => '验证码',
    ]);
}

username() 方法:

不用说,将返回字段改为 account。

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

完整代码:

app/Http/Controllers/Auth/LoginController.php

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

   /**
     * Attempt to log the user into the application.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return bool
     */
    protected function attemptLogin(Request $request)
    {
        return collect(['username', 'email', 'phone'])->contains(function ($value) use ($request) {
            $account = $request->get($this->username());
            $password = $request->get('password');
            return $this->guard()->attempt([$value => $account, 'password' => $password], $request->filled('remember'));
        });
    }

    /**
     * 登录验证.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return void
     */
    protected function validateLogin(Request $request)
    {
        $this->validate($request, [
            $this->username() => 'required|string',
            'password' => 'required|string',
            'captcha' => 'required|captcha',
        ],[
            'captcha.required' => ':attribute 不能为空',
            'captcha.captcha' => '请输入正确的 :attribute',
        ],[
            $this->username() => '账号',
            'captcha' => '验证码',
        ]);
    }

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

相关文章

  • Laravel 实现用户名 + 邮箱 + 手机号登录

    视图中将验证字段命名为 account。resources/views/auth/login.blade.php ...

  • Laravel 实现用户名 + 邮箱 + 手机号登录

    视图中我将待验证字段命名为 account。 resources/views/auth/login.blade.p...

  • 账号体系

    一、账号来源1、前台注册(手机号、邮箱、用户名)2、后台添加 二、账号登录 1、登录(用户名、密码)1)输入框为空...

  • laravel项目简介

    登录 *双向验证数据*ajax提交表单(CSRF攻击) 注册 *手机号邮箱验证*发送短信接口平台*laravel如...

  • laravel 5.2 auth 登录机制修改

    laravel 5.2在使用内置的auth进行登录控制时默认是使用邮箱和密码登录的,如果需要通过用户名和密码去登录...

  • 在线图书商城-项目简介

    登录 双向验证数据 提交表单(CSRF攻击) 注册 手机号和邮箱的验证 发送短信的接口平台 laravel如何发送...

  • 项目需求概览

    登录 双向验证数据 ajax提交表单(CSRF攻击) 注册 手机号和邮箱的验证 发送短信的接口平台 laravel...

  • JavaScript解析输入的邮箱用户名和域名

    实现效果:用户输入登录的邮箱,对邮箱进行解析,解析出邮箱的用户名和邮箱的域名 附上代码:

  • 360产品岗笔试总结

    有四道题: 1、说一说用户名登录、邮箱登录、手机号登录、二维码登录的使用场景,并分析原因。 2、简要说出一个你遇到...

  • 3.Django的多模式登录

    Django默认登录使用的是用户名的方式,在项目实际开发中,可能会允许用户使用,手机号或邮箱等去登录的形式。我们可...

网友评论

    本文标题:Laravel 实现用户名 + 邮箱 + 手机号登录

    本文链接:https://www.haomeiwen.com/subject/agonpktx.html