首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在有限的时间内认证/授权匿名用户?

如何在有限的时间内认证/授权匿名用户?
EN

Stack Overflow用户
提问于 2018-07-30 14:16:32
回答 2查看 805关注 0票数 9

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

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

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

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

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

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

有什么更好的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-01 14:25:44

创建一个kernel.request 监听程序。通过这种方式,您可以在执行任何操作之前采取行动,而整个应用程序都忽略了用户随时可能被注销的事实。

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

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

至于身份验证本身,可以选择一个海关警卫,在这里您可以完全控制身份验证过程的工作方式。

票数 7
EN

Stack Overflow用户

发布于 2018-08-05 18:06:23

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

代码语言:javascript
复制
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;

public function indexAction(Request $request)
{
    $em = $this->getDoctrine()->getManager();

    /**
     * confirm that the user indeed owns 
     * phone number related to the invoice (code verification)
     */

    //create a user for this task only and fetch it
    $user = $em->getRepository(User::class)->find(1);

    //firewall name used for authentication in security.yml
    $firewall = "main_secured_area";

    $token = new UsernamePasswordToken($user, null, $firewall, $user->getRoles());
    $this->get('security.token_storage')->setToken($token);
    $this->get('session')->set("_security_$firewall", serialize($token));

    //$lifetime takes number of seconds to define session timeout 15min = 900sec
    $this->container->get('session')->migrate($destroy = false, $lifetime = 900);

    //fire the login event manually
    $event = new InteractiveLoginEvent($request, $token);
    $this->get("event_dispatcher")->dispatch("security.interactive_login", $event);

    return $this->render('default/index.html.twig');
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51596032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档