问题标签 [laravel-authorization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1294 浏览

php - 为什么按照这个“添加自定义提供程序”教程在我的 Laravel 项目中找不到“App\Extensions\RiakUserProvider”命名空间?

我对PHPLaravel完全陌生。

我正在开发一个Laravel 5.3应用程序,我必须使用自定义 Web 服务来检查用户凭据,所以我正在尝试遵循这个关于添加自定义提供程序来处理用户访问的官方教程:https ://laravel.com/docs /5.3/authentication#adding-custom-user-providers。所以,理论上它看起来很简单,但我发现了一些困难。

正如您在上一个教程中看到的那样,第一步是修改 Laravel 项目中包含的App\Providers\AuthServiceProvider类。

因此,我根据获得此的教程示例修改了我的AuthServiceProvider :

问题是它找不到App\Extension命名空间,这个:

PhpStorm 用红色标记扩展,说“未定义扩展命名空间”,因此它不能在我的代码中使用RiakUserProvider类。

为什么?我必须在 Composer 中添加一些依赖项吗?怎么了?我错过了什么?我该如何解决这个问题?

RiakUserProvider类到底是什么?

这段代码到底是什么:

0 投票
0 回答
2197 浏览

php - 为什么我在尝试在 Laravel 5.3 中实现我的自定义用户提供程序时收到此致命错误“找不到类 'App\Providers\AuthServiceProvider'”?

我是PHPLaravel的新手,我来自 Java。

我正在尝试按照本教程来实现自定义用户提供程序

https://blog.georgebuckingham.com/laravel-52-auth-custom-user-providers-drivers/

我简要解释一下我需要什么:我的Laravel应用程序只是一个前端应用程序,所有的业务逻辑,包括用户身份验证,都是由一个暴露 REST Web 服务的 Java 后端应用程序执行的。

执行呼叫:

并将用户名和密码作为基本身份验证传递,我获得了一个代表已登录用户的 JSON 响应:

因此,在我的 Laravel 应用程序中,我必须执行此调用,然后解析之前返回的 JSON 对象,以将经过身份验证的对象生成到前端应用程序会话中。

我认为以前的自定义用户提供程序是更简洁、最自然的解决方案,但是我发现了一些困难,并且我对如何在我的项目中做到这一点有很多疑问。

我正在使用Larave 5.3版本。

我已经完成了以下步骤(按照上一个教程并尝试使其适应我的需要):

1) 第 1 阶段:注册您的自定义用户提供程序:

我已经创建了我的服务提供者,我在其中注册了 mycustom 身份验证用户提供者(用于通过 Web 服务执行我的自定义登录的自定义组件)。

所以在我的 Laravel 项目的app目录中,我创建了Authentication子目录,在这里我放了这个扩展ServiceProvider的AuthServiceProvider

这只是注册您的用户提供程序/驱动程序,使其可通过 our_provider 键在 config/auth.php 文件中使用。

第一个疑问:将鼠标传递给:

结果是Undefined class Auth,为什么?在我看来,它没有在以前的代码中使用,可能是教程包含错误或者我遗漏了什么?

然后我将此服务注册到我的config/app.php文件中:

这是此文件的提供者部分:

如您所见,此数组包含我的App\Authentication\AuthServiceProvider::class,代表以前的ServiceProvider。这是对的吗?

2:第 2 阶段:更新配置以使用新驱动程序:

我告诉我的 Laravel 应用程序使用以前的用户提供程序,所以我进入config/auth.php配置文件并设置我的提供程序:

为了完整起见,我发布了config/auth.php的全部内容,以便您查看是否还有其他错误:

3)第三阶段:创建用户类:

我认为这类似于一个模型对象,它将包含从我的 Web 服务接收到的数据(如果用户可以登录系统)。

因此,如果我没有遗漏某些内容,则它必须包含这样的结构(用户名、电子邮件、ebabled 字段):

根据教程,这个用户类必须实现 Laravel Illuminate\Contracts\Auth\Authenticatable 接口

因此,在/app/Authentication类(包含之前的AuthServiceProvicer类的同一类)中,我将这个User类实现了Authenticatable接口:

怀疑:教程示例仅在此类中放置了存根方法,我没有令牌,我想我只想检索以前的用户名、电子邮件、ebabled 字段。所以我认为这门课是不完整的。我到底要做什么?创建这 3 个字段(代表我的 Web 服务返回的用户信息)和相关的 getter 方法?是它还是我错过了什么?

4) 第 4 阶段:创建一个 UserProvider 类:

在第一阶段,我有一个回调函数,它返回一个App\Authentication\UserProvider的实例,这个类用于检索我们的用户 App\Authentication\User 的实例

这个类必须实现Illuminate\Contracts\Auth\UserProvider接口。在我看来,必须实现的方法将包含检索我的用户信息的逻辑(因此在我必须进行 Web 服务调用的特定情况下)。

所以在同一个app/Authentication目录中,我把这个UserProvider实现了Illuminate\Contracts\Auth\UserProvider接口,这是我的代码:

所以我认为我必须把我的网络服务调用放在这个方法retrieveByCredentials()中,这个:

为了简单起见,此时我已经硬编码了由执行 http 请求的 Web 服务返回的现有用户的凭据,因此对于用户在登录表单中插入的任何凭据,将始终检索该用户(我想做一个测试...然后我将与插入的凭据集成)。

好的,这是我在本教程之后理解的逻辑,它是正确的还是我遗漏了什么?

然后我通过语句php artisan serve启动我的 Laravel 项目,但我收到以下错误消息:

为什么?怎么了?我错过了什么?我该如何解决这个问题?

0 投票
1 回答
4226 浏览

php - 为什么在尝试使用自定义用户提供程序登录时出现此“类 App\Listeners\LogAuthenticationAttempt 不存在”错误?

我是PHPLaravel框架的新手,我正在疯狂地尝试实现以下任务。

我正在尝试按照本教程来实现自定义用户提供程序

https://blog.georgebuckingham.com/laravel-52-auth-custom-user-providers-drivers/

我正在使用Larave 5.3版本。

我简单解释一下我需要什么:我的Laravel应用程序只是一个前端应用程序,所有的业务逻辑,包括用户身份验证,都是由一个暴露REST Web 服务的Java 后端应用程序执行的。

执行呼叫:

并将用户名和密码作为基本身份验证传递,我获得了一个JSON响应:

因此,在我的 Laravel 应用程序中,我必须执行此调用,然后解析之前返回的 JSON 对象,以将经过身份验证的对象生成到前端应用程序会话中。

我认为上一个自定义用户提供r 是更整洁和最自然的解决方案,但我得到了一个错误,我会解释这种情况。

我已经实现了上一个教程的所有4 个步骤,并且我认为我已经用我的自定义用户提供程序正确替换了用户提供程序

在这些实施步骤之后,我执行了这个命令:

生成与 Laravel登录系统相关的视图路由。我希望它使用自定义用户提供程序

所以我有这些路线:

如您所见,有标准的登录路线。我认为现在它必须使用我的自定义用户提供者(调用我的 REST Web 服务的那个)而不是标准的。

我使用语句运行应用程序:

它开始时没有错误,然后我访问此 URL:

并且登录页面正确显示。

然后我插入凭据(电子邮件和密码),但是当我提交登录表单时,我收到此错误消息:

为什么?有什么问题?我该如何解决这个问题?

我不喜欢 Laravel,但正在搜索有关 Laravel 登录的在线信息以及丢失的LogAuthenticationAttempt类的问题,我找到了这个 SO 帖子:

使用 Laravel 5.2 记录失败的登录尝试

也许这是一个类似的问题,但我不明白它可能是相同的情况以及如何解决它。

我能做些什么?

0 投票
1 回答
360 浏览

laravel - 更改重置密码中使用的列

我正在使用 Laravel 5.2 应用程序。我正在实现身份验证模块。问题是我没有一个名为email的列,而不是我有一个mail列,这是因为我没有使用模块的默认 User 表。因此,现在注册、登录和注销工作正常,因为在 AuthController 我设置:

但是,另一方面,ResetPassword不起作用,因为仍在寻找该email列并且它给了我这个错误:

我不希望它比较email,而是我需要mail

0 投票
0 回答
191 浏览

laravel - 无法覆盖策略中的授权方法

我想在授权失败时回复自定义消息。我已经覆盖了 Policy 类中的方法,但它没有返回自定义消息。

政策:

在 PostController 中实现:

响应仍然返回HandlesAuthorization特征中定义的内容,即:

0 投票
1 回答
1876 浏览

php - Laravel Gate:授权不起作用

我正在尝试使 laravel 基本授权。我正在使用门进行 laravel 授权。

表结构

authServiceProvider

它不能正常工作意味着我无法访问该路线,尽管它在权限表中与适当的用户一起存在。

0 投票
2 回答
3311 浏览

php - Laravel 5 - 仅允许在 Auth 和管理员之后注册

我正在尝试设置 Laravel 注册页面,以便 /register 仅在以下情况下可用:

  • USERIS AUTHENTICATED=TRUE

  • USERTYPE=“ STAFF”(存储在数据库中)

需要修改哪个文件,以便员工用户可以注册新的患者用户?在这种情况下,普通/患者用户的公共注册将被关闭。

0 投票
1 回答
573 浏览

php - Laravel 5.3 Auth - 可以注册和登录,但也可以继续作为访客

我目前正在使用 Laravel 开发一个网站,用户可以在其中注册并登录以在我的页面上执行某些操作。

现在,我计划介绍以访客身份进行操作的可能性,这样他们就可以“以访客身份登录”,然后像普通用户一样进行操作(但无法永久保存他们输入的信息)。此外,他们应该始终能够通过输入他们的邮件地址和密码来将此访客帐户更改为永久帐户。我想在单击以访客身份登录时简单地在数据库中创建一个新用户,就像普通注册用户一样,然后将其删除,但我不确定这是否容易......有什么方法可以“轻松”这样做还是您对如何做有任何想法?

注册用户应该能够做很多事情,比如更改他们的地址、信息、提交票证、注册时事通讯等……客人只能将东西放入购物车并购买(同时购买他们也应该能够创建一个帐户..)另外我知道我可能需要实现一个自定义保护来验证来宾用户(因为通常他们需要密码,我只希望他们输入他们的邮件地址“登录”。但是我当然需要生成会话密钥等,所以这是守卫部分......但是我需要做什么来创建这样一个自定义守卫来满足我的问题?我找到了 laravel文档(https://laravel.com/docs/5.3/authentication#adding-custom-guards),但不能真正将它与我的问题结合起来......

PS:我在页面中为不同的角色使用 Laratrust,因此我可以在使用他们的邮件地址登录后为访客用户显示不同的菜单或其他信息。但是,问题仍然是如何做到这一点......谢谢您的帮助!

编辑:再次考虑之后,我想让它更清楚一点。我基本上计划更改登录页面并添加一个像“以访客身份继续”这样的按钮并guestLogin为它定义一个路由。这条路线将指向一个控制器,该控制器以某种方式使用(可能是自制的)身份验证登录。单击该按钮时,会users在我的数据库中的表中添加一个条目,其中只有一个想法和一个记住标记。然后,来宾用户可以将产品放入他的购物车并可以订购一些东西。在订购过程中,他需要输入他的个人信息,例如他的地址、电子邮件地址等。然后他还可以选择选中复选框以自动注册,然后输入密码。然后他的信息也被保存到数据库中(在为来宾用户创建的行上)。

PS:再次在 Laratrust 上,我会创建一个访客角色来准确显示我希望他显示的页面,以及自定义结帐页面。所以唯一真正的问题是登录(通过自定义身份验证保护,我不知道如何实现它)以及稍后注册一个基本上已经存在的用户(即使到目前为止它只是 db 中的 ID)。

我希望你明白我的想法。

0 投票
4 回答
16566 浏览

php - laravel `Auth:user()` 或 `Auth:id()` 是如何工作的

laravelAuth:user()或如何Auth:id()工作

它是驻留在会话还是数据库中。

我搜索但没有得到好的文章。

请帮忙理解。我知道我会得到很多反对票;)

0 投票
1 回答
1479 浏览

api - 一个 Laravel 路由可以使用会话或令牌身份验证吗?

我在 Laravel 5.4 中定义我的 API 路由。这些路由中的大多数都需要身份验证,我希望能够使用以下任一方式进行此身份验证:

  • 令牌身份验证即auth:api(由不同域上的其他 Web 应用程序使用)
  • 或使用 session/cookie auth 即auth,用于主 Web 应用程序中的 AJAX 请求

是否可以这样做,或者我是否必须使用不同的路由组前缀或其他东西定义我的所有路由两次?例如,我是否必须让所有会话身份验证API 端点看起来像/ajax/api-endpoint所有令牌身份验证API 端点看起来像/api/api-endpoint

/api/api-endpoint这感觉很笨拙和随意——无论我使用什么身份验证方法,我都想访问。

如下指定两者authauth:api中间件似乎使 Laravel 在成功之前需要两种 auth 方法,而不是只需要任何一种:

Route::get('api/user', 'MyUserController@index')->middleware(['auth', 'auth:api']);