我正在实现自己的登录逻辑,而不是使用 Meteor.loginWithPassword。
对用户凭据执行所有检查后,我将从后端生成访问令牌:
前端将使用此令牌使用 Meteor.loginWithToken 进行登录:
Meteor.call('Users.login', username, usernameType, password, (error, result) => {
console.log(error, result);
if (!error) {
Meteor.loginWithToken(result, (error) => {
console.error(stack);
});
} else {
}
});
但流星不断抛出错误代码 403 并显示以下错误消息:
I20231025-16:28:45.143(8)? error: errorClass [Error]: Login forbidden [403]
I20231025-16:28:45.143(8)? at errorClass.Meteor.Error.clone (packages/meteor.js:754:10)
I20231025-16:28:45.143(8)? at Object.EJSON.clone (packages/ejson/ejson.js:595:14)
I20231025-16:28:45.143(8)? at packages/ejson/ejson.js:606:22
I20231025-16:28:45.144(8)? at Array.forEach (<anonymous>)
I20231025-16:28:45.144(8)? at Object.EJSON.clone (packages/ejson/ejson.js:605:13)
I20231025-16:28:45.144(8)? at cloneAttemptWithConnection (packages/accounts-base/accounts_server.js:1510:31)
I20231025-16:28:45.144(8)? at packages/accounts-base/accounts_server.js:256:16
I20231025-16:28:45.144(8)? at Hook.forEach (packages/callback-hook/hook.js:110:15)
I20231025-16:28:45.144(8)? at Hook.each (packages/callback-hook/hook.js:122:17)
I20231025-16:28:45.144(8)? at AccountsServer._failedLogin (packages/accounts-base/accounts_server.js:255:30)
I20231025-16:28:45.144(8)? at AccountsServer._attemptLogin (packages/accounts-base/accounts_server.js:488:12)
I20231025-16:28:45.144(8)? at MethodInvocation.methods.login (packages/accounts-base/accounts_server.js:654:23)
I20231025-16:28:45.144(8)? at maybeAuditArgumentChecks (packages/ddp-server/livedata_server.js:1885:12)
I20231025-16:28:45.144(8)? at packages/ddp-server/livedata_server.js:769:19
I20231025-16:28:45.144(8)? at Meteor.EnvironmentVariable.EVp.withValue (packages/meteor.js:1257:12)
I20231025-16:28:45.144(8)? at packages/ddp-server/livedata_server.js:767:46 {
I20231025-16:28:45.144(8)? isClientSafe: true,
我研究了meteor.js代码,发现EJSON.clone()发生错误,但不知道如何修复它。我在这个问题上纠结了好久。有人有建议吗
真的很感谢!!!
修复此问题的解决方案。
我已经解决了这个问题。这是因为我没有在
Accounts.validateLoginAttempt
函数中返回任何内容。导致它总是返回403禁止。此函数期望返回值 true
或 false
来指示成功或拒绝登录尝试。
谢谢。