如何在laravel身份验证中添加额外条件?

时间:2015-10-28 12:03:07

标签: laravel laravel-5.1

我想知道如何在laravel附带的laravel身份验证中添加像active一样的额外条件?我可以通过手动进行身份验证来做到这一点,但是如果我可以这么说,是否有任何可能使用默认身份验证?

3 个答案:

答案 0 :(得分:1)

您可以在数组参数中添加额外的项目,例如:

Auth::attempt([
    'username' => $username,
    'password' => $password,
    'some_field_name' => $some_value
]);

将检查所有项目,如where($key, '=', $value)

答案 1 :(得分:1)

如果在AuthController中覆盖AuthenticatesUsers trait的getCredentials方法,则可以添加额外的条件参数:

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use Illuminate\Http\Request;

class AuthController extends Controller
{
    use AuthenticatesAndRegistersUsers, ThrottlesLogins;

    /**
     * Get the needed authorization credentials from the request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    protected function getCredentials(Request $request)
    {
        $credentials = $request->only($this->loginUsername(), 'password');

        $credentials['active'] = 'y';
        return $credentials;
    }

    //Other code and methods here
}

此方法提供要检查Attempt方法的字段。在文件的开头,您需要使用Illuminate\Http\Request命名空间才能工作。

答案 2 :(得分:0)

我安装了 laravel 微风认证入门套件。 如果需要,您可以通过在 $credential 数组中添加列名和值来添加任何额外的用户表列验证。请参阅 App\Http\Requests\Auth\LoginRequest.php 中的 authenticate() 。

public function authenticate()
{
    $this->ensureIsNotRateLimited();
    $credentials =$this->only('username', 'password');
    $credentials['status'] = '1';
    

    if (! Auth::attempt($credentials, $this->filled('remember'))) {
        RateLimiter::hit($this->throttleKey());

        throw ValidationException::withMessages([
            'username' => __('auth.failed'),
        ]);
    }

    RateLimiter::clear($this->throttleKey());
}