我在这里尝试使用谷歌OAuth来验证我的节点快递应用程序中的用户.我可以成功执行OAuth,它会返回如下响应:
{
access_token: 'token string',
id_token: 'id.string',
expires_in: 3599,
token_type: "Bearer"
}
Run Code Online (Sandbox Code Playgroud)
这一切都有道理,但我不能为我的生活弄清楚如何解码JWT.我对这一切都缺乏经验,所以这对我来说有点陌生.
按照此处列出的说明操作:https://developers.google.com/accounts/docs/OAuth2Login#validatinganidtoken我正在尝试在我的节点应用中本地解码JWT.
我在我的节点环境中安装了https://github.com/hokaccha/node-jwt-simple.
而且我很确定我需要使用这个证书(https://www.googleapis.com/oauth2/v1/certs)以某种方式解码它,但我在这里有点不知所措.我真的不明白我如何将证书带入我的节点应用程序,之后如何将它与node-jwt-simple一起使用.而且我也不太了解我何时需要提取新证书,而不是使用缓存证书.
那些有经验的人可以帮助我吗?
谢谢你的帮助.我现在完全不知所措.
**更新**
所以我取得了一些进展......有点儿.通过调用jwt.decode(id_token,certificate,true); 我能够成功解码令牌.即使证书var是一个空对象{}.这给我留下了3个问题.1:使用谷歌网址将证书送入我的快递应用程序的最佳方法是什么?2:我怎么知道何时需要提供它的新版本?3:似乎传递给noVerify(jwt.decode中的第3个arg)的真实是一个糟糕的主意.如何在不通过的情况下实现这一目标?看起来似乎jwt-simple期待hs256并且令牌正在使用rs256.
再一次,我对此缺乏经验,所以我可能会离开这里.
*更新* 感谢Nat的帮助,我得到了这个工作!我想我尝试了每一个JWT和JWS节点模块.我最终登陆的内容如下:我发现我所看到的所有模块都没有完全符合我的想法.我创建了以下jwt解码辅助方法,我用它来解码id_token,所以我可以从标题中获取孩子.
module.exports = {
decodeJwt: function (token) {
var segments = token.split('.');
if (segments.length !== 3) {
throw new Error('Not enough or too many segments');
}
// All segment should be base64
var headerSeg = segments[0];
var payloadSeg = segments[1];
var signatureSeg = segments[2];
// base64 decode and parse …Run Code Online (Sandbox Code Playgroud) 我有几个笨拙的任务,我试图分享这些任务的全局变量,我遇到了问题.
我编写了一些自定义任务,根据构建类型设置正确的输出路径.这似乎是正确的设置.
// Set Mode (local or build)
grunt.registerTask("setBuildType", "Set the build type. Either build or local", function (val) {
// grunt.log.writeln(val + " :setBuildType val");
global.buildType = val;
});
// SetOutput location
grunt.registerTask("setOutput", "Set the output folder for the build.", function () {
if (global.buildType === "tfs") {
global.outputPath = MACHINE_PATH;
}
if (global.buildType === "local") {
global.outputPath = LOCAL_PATH;
}
if (global.buildType === "release") {
global.outputPath = RELEASE_PATH;
}
if (grunt.option("target")) {
global.outputPath = grunt.option("target");
}
grunt.log.writeln("Output folder: …Run Code Online (Sandbox Code Playgroud) 以前,要访问正在运行的 dokku 实例中的文件,我会运行:
docker ps获取容器 ID,然后
ls /var/lib/docker/aufs/diff/<container-id>/app/...
注意:我只是使用 'ls' 作为示例命令。我最终想引用一个特定的文件。
这肯定已更改,因为无法再通过此路径访问容器 ID。该文件夹中有大量目录,但没有一个目录与任何正在运行的容器相匹配。
在这种情况下,为整个容器安装一个卷似乎有点矫枉过正。我知道我可以使用dokku run project-name ls, 和访问文件系统docker exec <container-id> ls,但这些都不能满足我的用例。
为了更全面地解释一下,在我的 dokku 项目中,我有一些 .sql 文件用于引导我的 postgres 数据库。这些文件git push与项目的其余部分一起推送。
我希望使用 postgres dokku 插件来运行以下内容:
dokku postgres:connect db-name < file-name.sql
这是我以前一直在使用的:
dokku postgres:connect db-name < /var/lib/docker/aufs/diff/<container-id>/app/file-name.sql 但这不再有效。
对此有何想法?我在这一切都错了吗?
非常感谢您的任何想法。
docker ×1
dokku ×1
express ×1
google-oauth ×1
gruntjs ×1
javascript ×1
jwt ×1
node.js ×1
postgresql ×1
ubuntu ×1