Laravel 5 - 如何使用带有用户名的基本身份验证代替电子邮件?
Laravel 5 - how to use basic auth with username in place of email?
大家好!
所以在 Laravel 4 我们可以做到
Route::filter('auth.basic', function()
{
return Auth::basic('username');
});
但现在不可能了,文档也没有给出如何操作的线索。那么有人可以帮忙吗?
谢谢!
使用与默认中间件相同的代码创建新的自定义中间件:
并覆盖默认的 'email' 字段,例如:
return $this->auth->basic('username') ?: $next($request);
这是我正在使用的
class AuthenticateOnceWithBasicAuth
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return Auth::onceBasic('username') ?: $next($request);
}
}
使用Laravel 5.7,句柄方法如下所示:
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @param string|null $field
* @return mixed
*/
public function handle($request, Closure $next, $guard = null, $field = null)
{
return $this->auth->guard($guard)->basic($field ?: 'email') ?: $next($request);
}
如果看函数定义,可以指定$field
值。
According to Laravel's documentation 可以提供中间件参数:
Middleware parameters may be specified when defining the route by separating the middleware name and parameters with a :. Multiple parameters should be delimited by commas:
使用以下内容,我能够指定我的字段以在基本身份验证中使用:
Route::middleware('auth.basic:,username')->get('/<route>', 'MyController@action');
:,username
语法可能有点混乱。但是,如果您查看函数定义:
public function handle($request, Closure $next, $guard = null, $field = null)
你会注意到$next
后面有两个参数。 $guard
默认为 null
,我希望它保持 null/empty,所以我省略了该值并提供了一个空字符串。下一个参数(如文档所述用逗号分隔)是我想用于基本身份验证的 $field
。
大家好!
所以在 Laravel 4 我们可以做到
Route::filter('auth.basic', function()
{
return Auth::basic('username');
});
但现在不可能了,文档也没有给出如何操作的线索。那么有人可以帮忙吗?
谢谢!
使用与默认中间件相同的代码创建新的自定义中间件:
并覆盖默认的 'email' 字段,例如:
return $this->auth->basic('username') ?: $next($request);
这是我正在使用的
class AuthenticateOnceWithBasicAuth
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return Auth::onceBasic('username') ?: $next($request);
}
}
使用Laravel 5.7,句柄方法如下所示:
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @param string|null $field
* @return mixed
*/
public function handle($request, Closure $next, $guard = null, $field = null)
{
return $this->auth->guard($guard)->basic($field ?: 'email') ?: $next($request);
}
如果看函数定义,可以指定$field
值。
According to Laravel's documentation 可以提供中间件参数:
Middleware parameters may be specified when defining the route by separating the middleware name and parameters with a :. Multiple parameters should be delimited by commas:
使用以下内容,我能够指定我的字段以在基本身份验证中使用:
Route::middleware('auth.basic:,username')->get('/<route>', 'MyController@action');
:,username
语法可能有点混乱。但是,如果您查看函数定义:
public function handle($request, Closure $next, $guard = null, $field = null)
你会注意到$next
后面有两个参数。 $guard
默认为 null
,我希望它保持 null/empty,所以我省略了该值并提供了一个空字符串。下一个参数(如文档所述用逗号分隔)是我想用于基本身份验证的 $field
。