这个问题适合任何熟悉的人
我一直在做一些在线课程,并了解如何做以下两件事:
我试图基本上结合这两门课程的内容.我想使用Google Strategy + JWT身份验证.我想使用JWT而不是cookie,因为我的应用程序将是一个网络/移动/平板电脑应用程序,我需要从不同的域访问api.
我对此有两个问题: 要启动Google/facebook OAuth管道,您需要调用'/ auth/facebook'或'/ auth/google'.两个Oauth流程基本相同,所以当我从现在开始说"/ auth/google"时,我指的是其中之一.现在我遇到的问题是:在客户端,我是否通过href按钮链接或axios/ajax调用调用'/ auth/google'路由?如果我使用href或axios/ajax方法,我仍然会遇到两种解决方案的问题.
href方法问题:
当我将<a>带有href 的标签分配给'/ auth/google'时,身份验证工作完全正常.用户被推送到Google Auth流程,他们登录并调用'/ auth/google/callback'路由.我现在遇到的问题是如何从'/ auth/google/callback'正确地将JWT令牌发送回客户端?
经过大量的谷歌搜索后,我看到人们只是通过重定向查询参数中的oauth回调将JWT传递回客户端.例如:
res.redirect(301, `/dashboard?token=${tokenForUser(req.user)}`);
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,现在我的浏览器历史记录中保存了身份验证功能!我可以注销(破坏localStorage中保存的令牌),然后只需查看我的浏览器URL历史记录,回到查询参数中包含令牌的URL,我会自动再次登录而无需经过谷歌策略!这是一个巨大的安全漏洞,显然是接近它的错误方法.
axios/ajax方法问题: 在我解释这个问题的问题之前,我肯定知道如果我得到这个工作,它将解决我以前的href问题所遇到的所有问题.如果我设法从axios.get()调用中调用'/ google/auth'并在响应正文中接收JWT,我将不会将该令牌作为url param发送,并且它不会保存在浏览器历史记录中!完美对吗?这种方法还存在一些问题:(
尝试调用时,axios.get('/auth/google')我收到以下错误:
我是如何尝试解决问题的:
app.use(cors());到我的index.js中.这些解决方案都没有解决问题,所以现在我真的感到困惑.我想使用axios/ajax方法,但我不确定如何克服这个cors错误.
抱歉这么长的消息,但我真的觉得我必须给你所有的信息,以便你能够正确地帮助我.
再次感谢,期待收到您的来信!
我正在使用bash并尝试添加从文件创建的数组的所有元素.
while read line; do
array=($line);
sum=0
length=${#array[@]}
for i in ${array[@]:0:$length}; do
sum=$[$sum+${array[i]}] #<--- this doesn't work?
done
echo $sum
done < $1
Run Code Online (Sandbox Code Playgroud)
编辑:我应该更清楚为什么我想在for循环中使用数组拆分
输入可能是------> david 34 28 9 12
我想打印--->大卫83
所以我想循环遍历所有元素接受第一个.所以我会用:
length=$[${#array[@]} - 1]
for i in${array[@]:1:$length}
Run Code Online (Sandbox Code Playgroud)
因为这个我不能用:
for i in "${array[@]}"
Run Code Online (Sandbox Code Playgroud) 我正在使用 strtok 来分割字符串,它在前 4 次迭代中按预期工作,但之后开始变得混乱。该程序应该采用诸如“david 1 2 3 4 5”之类的行并打印出名称加上数字之和“david 15”...但是我在 strtok 方面遇到了问题。
编辑:我将 number 设为指针,以便以后使用代码(这只是一个片段)
这是我的 C 脚本:
#include <stdio.h>
#include <string.h>
char str1[50];
char *token;
char *end;
long int *number;
int loop = 1;
while(loop){
fgets(str1,50,stdin);
token = strtok(str1," ");
printf("%s ",token);
*number = 0;
while(token != NULL){
token = strtok(NULL," ");
if(token != NULL){
*number = *number + strtol(token,&end,0);
}
}
printf("%li\n",*number);
}
Run Code Online (Sandbox Code Playgroud)
通过此输入:
David 10 10 10 10 10
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
David 40
Run Code Online (Sandbox Code Playgroud)
预期输出是:
David 50
Run Code Online (Sandbox Code Playgroud)
怀疑 …
我已经阅读了类似的问题,但我找不到任何专门解决我的问题的东西(或者我根本不理解其他解决方案)
我正在尝试实现模板Stack类,并且在尝试推送到堆栈时遇到问题.这是我的Stack.cpp:
#ifndef _STACK_H
#define _STACK_H
#include <string>
#include <stdio.h>
#include "Node.cpp"
template<typename T>
class Stack{
private:
Node<T>* mHead;
public:
Stack();
~Stack();
void push(T data);
};
template<typename T>
Stack<T>::Stack(){
mHead = NULL;
}
template<typename T>
Stack<T>::~Stack(){
delete mHead;
}
template<typename T>
void Stack<T>::push(T data){ // <-- having trouble with this method
Node<T>* temp = new Node<T>;
temp->data = data;
//if head is already empty, just create 1 Node
if(mHead==NULL){
printf("if working\n");
mHead = temp;
}else{
printf("else working\n");
//rearrange Nodes
temp->next …Run Code Online (Sandbox Code Playgroud) 我已经开始自学python,并且注意到与全局变量和范围有关的某些奇怪事情。当我运行这个:
x = 2
y = 3
z=17
def add_nums():
y = 6
return z+y
Run Code Online (Sandbox Code Playgroud)
打印结果为23 ...但是,当我将返回值扩展为:
x = 2
y = 3
z=17
def add_nums():
y = 6
z = z + y
return z
Run Code Online (Sandbox Code Playgroud)
我在第6行收到以下错误:
Local name referenced but not bound to a value.
A local name was used before it was created. You need to define the
method or variable before you try to use it.
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么我在这里遇到错误,因为z是全局可访问的。
我对数据库和 mongo 很陌生。我正在创建一个 Web 应用程序,其中不同类型的用户可以通过不同的 UI 访问不同的路线。例如:用户、公司、管理员。我的问题是我是否应该创建一个包含所有用户的单个集合,并简单地添加“用户类型”或“访问级别”作为每个用户对象的属性?或者我应该有 3 个不同的集合,每种类型的用户一个?
这种事情的常见做法是什么?