我有一个使用API的rails应用程序。在网络上,我将“普通”rails视图与Angular视图混合使用。我有一个基本的应用程序控制器和一个基本的api控制器。在应用程序控制器中,我使用设计“before_filter:authenticate_user!”。在api控制器中,我使用了门卫“before_action:doorkeeper_authorize!”。
对于API,如果我浏览正常的OAuth流程,则此方法有效。但是,对于我的Angular视图,我已经知道我已登录并进行了会话。我知道我可以通过Angular中的正常OAuth流程获取授权令牌;但是,由于我已登录并进行了会话,因此我试图弄清楚如何对服务器进行额外调用。
我想到的一个解决方案是在用户登录时尝试使用api控制器中当前登录的用户。不太确定最佳方法。如果我通过设备登录用户,那么我不需要门卫的授权before_filter。
另一种解决方案是以某种方式将承载令牌传递给角度SPA视图。我不确定的是如何使用当前登录的用户会话从rails app获取持有人令牌。
感谢任何想法或帮助。
由于
答案 0 :(得分:0)
当我们使用门卫时,我们将在数据库中有一个用于存储令牌的表。如果我没弄错,表名是“oauth_access_tokens”。有一个列“resource_owner_id”,它是使用特定令牌的用户的id。
如果你可以获得你的用户id(你在会话中使用的id)与resource_owner_id之间的关系,那么我认为获得令牌并不困难。
另一个建议是,如果您不介意编辑门卫gem,可以将resource_owner_id从使用不同的用户ID序列更改为在会话中使用您的用户ID。如果这样做,您可以查看gem文件中的控制器。应该有“authorization_conrtroller”。
编辑matching_token?
可能会让您了解如何实施您想要做的事情。