首先,让我描述一下这个应用程序:我们正在开发一个基于 Web 的软件,它是某种定制的帮助台应用程序。它需要用户登录(我们使用FOSUserBundle)。登录后,用户被重定向到仪表板。从仪表板不再需要重新加载页面,前端是基于 Angularjs 构建的,用户可以在应用程序中的任何地方访问,而无需重新加载页面。您可以说是单页应用程序。
因此,呈现给用户的数据是从 rest api 获取的(我们使用FOSRestBundle)。这在这一点上工作得很好。
有某种困境。只有我们的员工才能访问此应用程序(目前)。因此,工作人员需要登录才能访问帮助台。通过angularjs推送到前端的数据是通过api调用的,所以刚刚登录的用户每次请求都需要重新认证,因为休息。
问题:由于后端运行在 symfony2 上,让我们在进行 api 调用时尝试获取当前登录用户的用户对象:
$this->get('security.context')->getToken()->getUser()
匿名返回。代表匿名,或
$this->getUser();
只返回null。
因此,使用 rest api 时,经过身份验证的上下文似乎消失了。但是,当我直接调用一个动作而不休息时,我可以获得用户信息。
所以我们需要的是保护我们的 rest api 并在每次 api 调用时获取用户信息。我们不希望第三方人员访问我们的应用程序,只有员工。我不熟悉 OAuth,但用户将被重定向到第三方页面以允许/拒绝访问他的数据?这对我们来说不是一个选择。
根据该信息,您对如何保护 api 和传输用户数据以使 getUser 不返回 null 或 anon 有任何建议或想法。但实际登录的用户?