假设我有一个发票实体。发票属于某个用户(invoices.user_id
)。
如果用户输入myapp.com/invoices/1
,则需要登录才能访问其发票。那很正常。
有时invoices.user_id
为空(发票所有者在我们的系统中没有帐户),但是我们有一个invoices.phone_number
列。
目标是为在我们系统中没有该帐户的用户创建一个基于SMS代码验证的身份验证系统。如果用户确认自己确实拥有与发票相关的电话号码(验证码),我想授予他对该发票详细信息页面(仅此页面)的临时访问权限(15分钟)。
我的第一个想法是使用存储在会话中的JWT令牌。
我的第二个想法是使用自定义防火墙。
还有更好的方法吗?
答案 0 :(得分:7)
创建一个kernel.request
listener。这样,您可以在执行任何操作之前就采取行动,并且整个应用程序都不会注意到用户可以随时注销。
调用“服务”以验证令牌。如果令牌无效,请清除身份验证状态并覆盖请求。例如,将用户重定向到“您需要再次付款”页面。
这样,您无需修改任何代码,执行任何投票程序等等,都可以保护您的整个应用程序。
对于身份验证本身,请使用custom guard,您可以在其中完全控制身份验证过程的工作方式。
答案 1 :(得分:2)
您可以使用以下操作对虚拟用户进行身份验证15分钟:
git remote add gitlab https://gitlab.com/myusername/myproject.git