小编Gra*_*yen的帖子

Yesod Auth:无会话Auth插件流程

我正在尝试使用Yesod作为移动应用程序的API后端,并选择使用承载JWT来处理身份验证和授权.我已经覆盖maybeAuthId了Yesod.Auth接受(或拒绝)JWT就好了.但是,我无法弄清楚如何让auth插件将令牌返回给客户端,而不是在客户端会话中存储AuthId并重定向客户端的默认行为.反正有没有改变默认的auth插件流,让它返回一个令牌给客户端?

更新:我已经在文档和源代码中挖掘了一下,并且更好地了解了auth插件现在如何工作:Auth插件在内部调用setCredsRedirect以设置会话并执行回调onLogin.使用的问题onLogin是,Creds是不是从函数内部访问.我唯一的解决方案是编辑authenticate函数以响应JWT.

authentication haskell session-less jwt yesod

5
推荐指数
0
解决办法
354
查看次数

函数结束时的 C++ 段错误。参考线 = 右大括号

总结:非常感谢大家!下面发布的所有回复都是正确的。最初的错误是我忘记为 NULL 终止符留出空间。strcpy() 是一个危险的函数,因为当我使用它时,它不知道“字符串”的结尾是什么时候。因此,strcpy() 抓取了大量数据并覆盖了返回地址。

编辑:从程序中添加了更多代码

解决:老实说,我最初的实现是垃圾。如果我想换出数组的元素,我什至不知道为什么要这样写交换。(当时,每个元素中只有一个字符数组。所以我能够摆脱旧的实现)。我已经把它改写为:

void swap(ArrayElement list[], int index1, int index2) {
     ArrayElement temp;
     temp = list[index1];
     list[index1] = list[index2];
     list[index2] = temp;
}
Run Code Online (Sandbox Code Playgroud)

我在以下函数结束时遇到分段错误问题。

struct ArrayElement {
    char data[SIZE_OF_ELEMENT];
    // Implemented this way so that I can expand to multiple values later on
}

//In main:
ArrayElement* list = new ArrayElement[NUM_OF_ELEMENTS];

void swap(ArrayElement list[], int index1, int index2) {
     char temp[SIZE_OF_ELEMENT];
     strcpy(temp, list[index2].data);
     strcpy(list[index2].data, list[index1].data);
     strcpy(list[index1].data, temp);
}
Run Code Online (Sandbox Code Playgroud)

错误是第 45 行的分段错误,它是函数的结尾大括号。这是使用 g++ 编译的。我使用 gbd 尝试调试它,一切正常,直到它碰到花括号。

如果需要,我可以从程序中提供更多代码。我不想发布整个内容,因为这是一个课程。

c++ arrays curly-braces segmentation-fault strcpy

1
推荐指数
1
解决办法
1105
查看次数