我正在为RESTAPI建立一个Laravel项目。基本上,我将用户分为两个表,用户和管理员(模型名)。我想使用默认的Laravel身份验证框架通过web guard对管理员进行身份验证,并使用JWT(tymondesigns提供的包)通过api guard对用户进行身份验证。一切都很顺利。我配置了软件包,在app/auth.php中设置了防护和提供者,并使其几乎正常工作。
我现在可以通过Auth Scaffold注册管理员,并通过用户的自定义登录控制器登录用户。我在浏览器上测试了管理员登录,它工作正常。然后在为用户设置登录之前,我将应用程序/auth.php中的默认保护更改为api(是:web),认为这是有意义的,因为大多数请求将作为API完成。我继续构建自定义登录控制器并测试自定义登录。路由保存在不同的文件中,API路由在路由/api.php和管理路由路由/web.php.我去测试管理员登录在浏览器上,它不再工作。尝试将默认保护再次更改为web,它正在工作。以某种方式,为每个路由定义的保护被忽略,并且只使用默认的保护。我在网上读了很多,我尝试的每一件事都没有成功。
这里是文件:
config/auth.php
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'admins',
],
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
]
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
'admins' => [
'provider' => 'admins',
'table' => 'password_resets',
'expire' => 60,
]
],
routes/web.php
Route::get('/', function () {
return view('welcome');
});
Auth::routes();
Route::get('home', 'HomeController@index')->name('home');
路线/api.php
Route::middleware('guest')->post('login', 'UserAuth\LoginController@login')->name('user.login');
Route::middleware('auth')->get('user', 'BaseController@loggedUserAPI')
->name('user.user');
任何形式的帮助或建议都将不胜感激。
正如您所说的,如果您使用的是Laravel提供的默认身份验证脚手架,则必须重写Http/Controllers/Auth/LoginController中的guard()方法,否则将始终使用默认的guard。
/**
* Get the guard to be used during authentication.
*
* @return \Illuminate\Contracts\Auth\StatefulGuard
*/
protected function guard()
{
// specify the guard that should be used for login attempts
return Auth::guard('web');
}
您还应该修改LoginController的构造函数以使用正确的中间件:
public function __construct()
{
$this->middleware('guest:web')->except('logout');
}
在您的路由/web.php文件中,您必须告诉您的身份验证和来宾中间件使用正确的防护(如果它不是默认的)
//例如:
Route::middleware('auth:web')->get('admin', 'AdminController@dashboard')
->name('user.user');
问题内容: 有一个实体A引用(多对一)实体B,从B到A的反向(映射)引用。也有从A到C的引用,以及从C到A的反向引用。当我发布entityManager.remove(A )然后flush(),“ delete”没有发芽!但也没有例外。就像根本没有调用remove()一样。为什么会这样?如果在remove()之前,我们从反向引用B.listOfA和C.listOfA中提取A,则会按预期生成“删除”
我正在尝试在vault中配置数据库机密引擎以生成动态凭据。在此期间,尽管我为SQL server提供了自定义有效端口,但vault似乎正在获取命令中提供的默认端口(通过忽略自定义端口)。请参阅截图 有人可以帮助配置vault数据库密钥引擎以使用自定义端口吗。 附加图像的文本版本: C:\WINDOWS\system32 将数据写入数据库/config/my-mssql数据库时出错:发出API请求时
问题内容: 有一个实体A引用(多对一)实体B,从B到A的反向(映射)引用。也有从A到C的引用,以及从C到A的反向引用。当我发布entityManager.remove(A)然后flush(),“delete”不会发芽!但也没有例外。就像根本没有调用remove()一样。为什么会这样?如果在remove()之前,我们从反向引用B.listOfA和C.listOfA中提取A,则会按预期生成“删除”。
默认情况下,身份认证并不需要访问资源。当安全约束(如果有)包含的url-pattern 是请求 URI 的最佳匹配,且结合了施加在请求的 HTTP 方法上的 auth-constraint(指定的角色),则身份认证是需要的。同样,一个受保护的传输是不需要的,除非应用到请求的安全约束结合了施加在请求的HTTP方法上的 user-data-constraint(有一个受保护的transport-gua
有一个实体A引用(多对一)实体B,从B到A有反向(映射到)引用。还有一个引用A到C,反向引用C到A。当我发出entitymanager . remove(A)then flush()时,没有生成“delete ”!但是也没有例外。就像根本没有调用remove()一样。为什么会这样?如果在remove()之前我们从反向引用B.listOfA和C.listOfA中提取A,那么“delete”就像预期的
JOOQ似乎完全忽略了数据库列的默认值。既不会更新ActiveRecord对象,也不会在插入时跳过此列。相反,它尝试将其设置为NULL,这在非NULL列上失败。 例: 我所期望的行为是,要么new记录()用korrekt值初始化所有默认变量(尽管我知道如果结果是自定义函数的结果,这可能很困难:-))。或者INSERT INTO不插入所有带有默认值的未修改列,然后INSERT INTO后面跟着一个S