在开发模式下使用laravel中的任何密码登录

时间:2018-05-22 01:11:04

标签: php laravel authentication laravel-5 login

我们在laravel中有auth()函数,并按如下方式调用它:

auth()->attempt(['email' => 'hello@gmail.com', 'password' => 123456]);

我想为会话保护设置新的提供商,并在config/auth.php配置auth()功能处于开发模式。

但我无法在我的提供商文件中找到方法!

1 个答案:

答案 0 :(得分:0)

这是一个坏主意,因为您可能无意中将安全风险引入生产代码中。但为了实验的利益......

一种方法是覆盖默认会话防护中的验证,但我认为这样做风险太大。因此,如果不是在开发模式下,我会复制你现有的生产防护装置,并强制它死掉。以下是假设您正在使用会话保护的示例。

/app/Providers/AuthServiceProvider.php注册一名新警卫:

    use App\Services\Auth\SillyGuard;

...

public function boot()
{
    $this->registerPolicies();

    Auth::extend('silly', function ($app, $name, array $config) {
        // Return an instance of Illuminate\Contracts\Auth\Guard...

        return new SillyGuard(Auth::createUserProvider($config['provider']));
    });
}

将其添加到您的/config/auth.php - 您将要覆盖现有的网络防护,否则当您从开发切换到生产时,您必须重新定义所有路线。 当您进入生产模式时,您必须将此防护装置切换回原始驱动程序

'guards' => [
    //others
    'web' => [
        'driver' => 'silly',
        'provider' => 'users',
    ],
],

将文件...src/Illuminate/Auth/SessionGuard.php复制到app/Services/Auth/SillyGuard.php并进行以下更改:

//namespace Illuminate\Auth;
namespace App\Services\Auth;

...

public function __construct($name,
                            UserProvider $provider,
                            SessionInterface $session,
                            Request $request = null)
{
     if (!\App::environment('local') || !config('app.debug')) {
         die("This guard only works in local debug mode");
     }
     $this->name...

...

 protected function hasValidCredentials($user, $credentials)
{
    //return ! is_null($user) && $this->provider->validateCredentials($user, $credentials);
    return ! is_null($user);
}