我正在尝试在我的angular 5应用程序中实现auth0,遵循本教程: https://toddmotto.com/angular-2-authentication
该注册表工作正常,但当我尝试登录时,我在控制台中获得以下内容:
这是我的身份验证服务:
import { Injectable } from '@angular/core';
// We want to avoid any 'name not found'
// warnings from TypeScript
declare var Auth0Lock: any;
@Injectable()
export class AuthService {
private lock
constructor() {
// These stuff should be exported into other files
this.lock = new Auth0Lock('id...',
'url...')
}
login() {
this.lock.show((error: string, profile: Object, id_token: string) => {
if (error) {
console.log(error);
} else {
console.log(profile)
localStorage.setItem('profile', JSON.stringify(profile));
localStorage.setItem('id_token', id_token);
}
});
}
logout() {
localStorage.removeItem('profile');
localStorage.removeItem('id_token');
}
}
有什么想法吗?
答案 0 :(得分:0)
state参数是一个任意状态值,将在重定向之间进行维护。减轻XSRF攻击以及完成身份验证过程后可能需要的任何上下文信息(如返回URL)很有用。
当您使用Auth0.js和/或Lock库触发身份验证请求时,Auth0.js将在浏览器的localStorage中存储现时和状态(您提供的现时或它自动生成的现时和状态)。这样做是为了在服务器响应返回时(在parseHash或on('authenticated')事件中)对它们进行验证。
缺少/无效的状态错误可能是由以下几种情况引起的:
/授权请求是通过与目标回调URL不同的方案(HTTP / HTTPS)执行的,因为未在不同方案之间共享localStorage。
以相同状态(组件可能正在重新呈现)连续两次调用parseHash方法,因为在检索值时,Auth0.js将删除存储的信息。
在将登录页面添加为书签后尝试登录的用户。这是因为应该为每个请求生成一个新的状态值。您可以设置默认的“租户/应用程序”登录URL,以在检测到这种情况后将用户重定向到here。
使用SAML身份提供程序(IdP)启动的登录流程不带enabledIdPInitiated
标志,有关here的更多信息。
使用自定义域的SAML服务提供程序(SP)发起的流程,其中SAML提供程序将Auth0域用于AssertionConsumerService(ACS)URL。
请确保已按照上述要点正确配置了应用程序。如果这些方法不能解决问题,请共享存储库,以便我们尝试重现该问题。