首页 » Web技术 » Laravel » 正文

Laravel 实现多字段登录

现在很多网站都提供了这样的功能,用户可以通过邮箱、手机号或者昵称来登录网站,下面是在 Laravel (以 5.1 为例)中实现该功能的方式。

下面三种方法基本原理都是相同的。

1. 方法一

使用 Laravel 自带认证系统,修改 /app/Http/Controllers/Auth/AuthController.php 文件,重写方法(原方法所在文件 /vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php):

namespace App\Http\Controllers\Auth;
......
use Illuminate\Http\Request; // 增加该行

class AuthController extends Controller
{
    protected $username = 'login';

    ....

    protected function getCredentials(Request $request)
    {
        $login = $request->get('login');
        $field = filter_var($login, FILTER_VALIDATE_EMAIL) ? 'email' : 'name';

        return [
            $field => $login,
            'password' => $request->get('password'),
        ];
    }
}

2. 方法二

修改 /app/Http/Controllers/Auth/AuthController.php 文件,这也是使用 Laravel 自带认证系统的一种方法。

namespace App\Http\Controllers\Auth;
......
use Illuminate\Http\Request; // 增加该行

class AuthController extends Controller
{

    // 修改这里
    use AuthenticatesAndRegistersUsers, ThrottlesLogins {
        AuthenticatesAndRegistersUsers::postLogin as laravelPostLogin;
    }

    ......

    // 增加方法
    public function postLogin(Request $request)
    {
        $field = filter_var($request->input('login'), FILTER_VALIDATE_EMAIL) ? 'email' : 'name';
        $request->merge([$field => $request->input('login')]);
        $this->username = $field;

        return self::laravelPostLogin($request);
    }
}

3. 方法三

重写登录功能

LoginRequest.php:

public function rules()
{
    return [
       'login' => 'required',
       'password' => 'required'
    ];
}

AuthController.php:

public function login(LoginRequest $request)
{
    $field = filter_var($request->input('login'), FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
    $request->merge([$field => $request->input('login')]);

    if ($this->auth->attempt($request->only($field, 'password')))
    {
        return redirect('/');
    }

    return redirect('/login')->withErrors([
        'error' => 'These credentials do not match our records.',
    ]);
}

 


该篇属于专题:《Laravel小技巧

本文共 2 个回复

  • 搬瓦工 2016/02/20 13:08

    兄弟,交换链接吗?bandwagonvps.com/

发表评论