我们在laravel中有auth()
函数,并按如下方式调用它:
auth()->attempt(['email' => 'hello@gmail.com', 'password' => 123456]);
我想为会话保护设置新的提供商,并在config/auth.php
配置auth()
功能处于开发模式。
但我无法在我的提供商文件中找到方法!
答案 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);
}