首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >后端和前端共享CASL库的用户授权

后端和前端共享CASL库的用户授权
EN

Stack Overflow用户
提问于 2020-04-28 19:20:55
回答 1查看 917关注 0票数 1

我正在寻找一种在前端(React)和后端(Node.js,Koa,GraphQL)中实现授权的方法。我偶然发现了casl包:https://github.com/stalniy/casl

虽然后端授权对我来说似乎很简单,但我不明白的是,我如何才能将授权规则从后端分享到我的前端。一篇中等水平的帖子建议使用JWT令牌。如何使用JWT令牌来做到这一点?

https://medium.com/dailyjs/casl-and-cancan-permissions-sharing-between-ui-and-api-5f1fa8b4bec

EN

回答 1

Stack Overflow用户

发布于 2020-04-28 19:39:20

似乎CASL有两个功能来实现这一点,packRules和unpackRules。

根据后台文档,您可以执行以下操作:

代码语言:javascript
复制
import { packRules } from '@casl/ability/extra';
import jwt from 'jsonwebtoken';
import { defineRulesFor } from '../services/appAbility';

app.post('/session', (req, res) => {
  const token = jwt.sign({
    id: req.user.id,
    rules: packRules(defineRulesFor(req.user))
  }, 'jwt secret', { expiresIn: '1d' });

  res.send({ token });
});

在前台,你可以这样做:

代码语言:javascript
复制
import { unpackRules } from '@casl/ability/extra'
import jwt from 'jsonwebtoken';
import ability from '../services/appAbility';

export default class LoginComponent {
  login(params) {
    return http.post('/session')
      .then((response) => {
        const token = jwt.decode(response.token);
        ability.update(unpackRules(token.rules))
      });
  }
}

https://stalniy.github.io/casl/v4/en/api/casl-ability-extra

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61478999

复制
相关文章

相似问题

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