ngx-cookie-service 是不是是对 Angular Universal 应用程序进行身份验证的完整方法

Posted

技术标签:

【中文标题】ngx-cookie-service 是不是是对 Angular Universal 应用程序进行身份验证的完整方法【英文标题】:Does ngx-cookie-service a complete way to do authentication for Angular Universal appsngx-cookie-service 是否是对 Angular Universal 应用程序进行身份验证的完整方法 【发布时间】:2020-05-29 08:01:19 【问题描述】:

我正在构建一个 Angular Universal MEAN(MongoDB、Express、Angular、Node)应用程序,但我正在寻找处理安全性的正确方法。我知道您不能将 localStorage 与 Angular Universal 一起使用。 ngx-cookie-service 是处理安全、授权等的完整方法吗?会实施这样的事情...

https://www.npmjs.com/package/ngx-cookie-service

...或者这个...

https://itnext.io/angular-8-how-to-use-cookies-14ab3f2e93fc

cookie 是否使用令牌代替?

它会在后端的 app.js 中替换这样的代码吗:

    app.use((req, res, next) => 
  res.setHeader("Access-Control-Allow-Origin", "*");
  res.setHeader(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content-Type, Accept, Authorization"
  );
  res.setHeader(
    "Access-Control-Allow-Methods",
    "GET, POST, PATCH, PUT, DELETE, OPTIONS"
  );
  next();
);

app.use("/api/posts", postsRou​​tes);

这在后端...

const jwt = require("jsonwebtoken");

module.exports = (req, res, next) => 
  try 
    const token = req.headers.authorization.split(" ")[1];
    const decodedToken = jwt.verify(token, process.env.JWT_KEY);
    req.userData =  email: decodedToken.email, userId: decodedToken.userId, isAdmin: decodedToken.isAdmin ;
    next();
   catch (error) 
    res.status(401).json( message: "You are not authenticated!" );
  
;  

如果您有一个简单的 MEAN 堆栈 Angular Universal 应用程序代码示例的链接,该示例演示了使用 cookie 的正确方法,请分享。或者,如果它是一个复杂的解释,也许是一篇带有粗略解释的文章。感谢您的时间。非常感谢。

K

【问题讨论】:

【参考方案1】:

ngx-cookies 不提供执行身份验证的“完整”方法,只是在使用 Angular Universal 时设置/获取 cookie 的简单方法。

在您的后端,安装并使用 cookieParser

const cookieParser = require('cookie-parser');
app.use(cookieParser());

然后,不要从自定义授权标头中获取您的 jwt,而是从 cookie 中获取它

const token = req.cookies.authorization.split(" ")[1];

【讨论】:

以上是关于ngx-cookie-service 是不是是对 Angular Universal 应用程序进行身份验证的完整方法的主要内容,如果未能解决你的问题,请参考以下文章

注释是对代码的“提示”,而不是文档

关于哲学家就餐问题中wait()的运用,求大神解释。以下这些代码是对的还是错的?是不是解决了死锁问题

如下图:如果在密码文本框后加隐藏域是不是是对密码文本框中输入的内容有效?红圈内的输入内容起作用?

狂欢,是对梦想的追求

wpf中怎么为datagrid绑定一个list 我的代码如下,为啥显示出来的全是空行?。。。 似乎数据个数是对的…

为啥我的dede调用dede:pagelist无法显示,文章数是对的,但是总页数总显示1页,也没有翻页的连接?