如何在有限的时间内对匿名用户进行身份验证/授权?

时间:2018-07-30 14:16:32

标签: php symfony symfony-security

假设我有一个发票实体。发票属于某个用户(invoices.user_id)。

如果用户输入myapp.com/invoices/1,则需要登录才能访问其发票。那很正常。

有时invoices.user_id为空(发票所有者在我们的系统中没有帐户),但是我们有一个invoices.phone_number列。

目标是为在我们系统中没有该帐户的用户创建一个基于SMS代码验证的身份验证系统。如果用户确认自己确实拥有与发票相关的电话号码(验证码),我想授予他对该发票详细信息页面(仅此页面)的临时访问权限(15分钟)。

我的第一个想法是使用存储在会话中的JWT令牌。

我的第二个想法是使用自定义防火墙。

还有更好的方法吗?

2 个答案:

答案 0 :(得分:7)

创建一个kernel.request listener。这样,您可以在执行任何操作之前就采取行动,并且整个应用程序都不会注意到用户可以随时注销。

调用“服务”以验证令牌。如果令牌无效,请清除身份验证状态并覆盖请求。例如,将用户重定向到“您需要再次付款”页面。

这样,您无需修改​​任何代码,执行任何投票程序等等,都可以保护您的整个应用程序。

对于身份验证本身,请使用custom guard,您可以在其中完全控制身份验证过程的工作方式。

答案 1 :(得分:2)

您可以使用以下操作对虚拟用户进行身份验证15分钟:

git remote add gitlab https://gitlab.com/myusername/myproject.git