Если пользователь не аутентифицирован, я перенаправляю его на корпоративную страницу входа:
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, {session: 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:|"/"|
Что мне не хватает? Спасибо.