如何使用基于令牌的身份验证来保护网页?

问题描述:

我正在建立一个网站使用红宝石的轨道上分开托管,这使得请求到另一个后端api轨道应用程序,这是再次托管分开。很明显,我已经设置了基于令牌的oauth认证的后端api。如何使用基于令牌的身份验证来保护网页?

现在,因为我不处理会话,它是无状态所有,我怎样才能阻止用户访问我的前端Web应用程序中的某些查看页面?例如,我有一个消费者/预订页面。我不希望用户在未登录的情况下访问此页面。但是,任何人都可以立即输入网址并打开他们想要的任何页面。

在用户登录(来自.js.erb文件的ajax调用)时,获取令牌并将其存储在localStorage变量中,以便将来每次向api发送请求。我知道我应该以某种方式使用此令牌来阻止用户访问受限制的页面。但我只是不知道如何。

+0

我还没有尝试过,但是我认为你在API验证上检查了这个[GoRails视频](https://gorails.com/episodes/api-auth-with-json-web-tokens-and-knock)智威汤逊。 – matiss

+0

即时通讯使用守门人宝石oauth – Chet

现在,你已经存储了tokenlocalStorage你就需要通过此令牌与要求要限制访问,并检查用户是否有权访问该页面或不是页面。

TL; DR:对此没有标准方法或库;您必须实施您认为合适的功能。

我假设你正在使用某种类似前端框架的反应;如果是这样,那么如果localStorage中没有有效的标记,那么任何更改当前视图的请求应该被终止。查看有关React中的条件呈现的this post;如果你正在使用别的东西,这个方法仍然几乎相同。否则,我会构建一个小脚本,以在每个页面的开始部分包含检查是否存在有效令牌,如果没有,请调用window.history.back()将用户返回到上一页。 (另一种方法是拦截服务器上静态HTML文件的每一个调用,检查是否有令牌,如果有的话发送文件,否则,你可以发送自定义错误页面或其他) 。