如果用户未通过身份验证,我会将其重定向到公司登录页面:
https://super-secret-gateway/authorization.oauth2?client_id=XXXX&redirect_uri=http://localhost:4200/callback&response_type=token&scope=profile%20openid
输入用户名和密码后通过身份验证后,将使用以下URL重定向回他
https://myapp/callback#access_token=2YotnFZFEjr1zCsicMWpAA&type=Bearer&expire_in=3600&state=myAppRandomState
在这种情况下,我不知道如何使用authenticateSession
测试助手。
ESA文档没有关于此的详细示例,而我的操作方式也不起作用:
module('Acceptance | Dashboard', function(hooks) {
setupWindowMock(hooks);
setupApplicationTest(hooks);
setupMirageTest(hooks);
test('Authenticated users can visit /dashboard', async function(assert) {
let shop = this.server.create('shop');
this.server.create('user', { shop });
await authenticateSession({
token: 'abcdDEF',
token_type: 'Bearer'
});
await visit('/dashboard');
assert.equal(currentURL(), '/dashboard', 'user is on dashboard page');
});
});
问题似乎是由于在我的window.location.replace
路线中使用了index
:
导出默认Route.extend(UnauthenticatedRouteMixin,{ 会话:service('session'), routeIfAlreadyAuthenticated:'dashboard',
beforeModel: function() {
this._super(...arguments);
if (!this.get('session.isAuthenticated')) {
let oauthUrl = config.oauthUrl;
let clientId = config.clientID;
let redirectURI = `${window.location.origin}/callback`;
let responseType = `token`;
let scope = `profile%20openid`;
window.location.replace(oauthUrl
+ `?client_id=${clientId}`
+ `&redirect_uri=${redirectURI}`
+ `&response_type=${responseType}`
+ `&scope=${scope}`
);
}
}
要解决此问题,我必须使用ember-window-mock附加组件。但是在这种情况下,问题仍然存在。关键是当我使用此断言时:
assert.equal(window.location.href, '/dashboard', 'user is on dashboard page');
测试显示window.location.href
指向登录页面而不是/dashboard
的区别。
如果我使用以下断言:
assert.equal(currentURL(), '/dashboard', 'user is on dashboard page');
区别是:
Expected:|"/dashboard"|
|Result:|"/"|
我想念什么?谢谢。