ember-simple-auth和隐式授予身份验证:使用authenticateSession测试助手

时间:2019-02-08 14:19:08

标签: ember.js ember-cli-mirage

如果用户未通过身份验证,我会将其重定向到公司登录页面:

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:|"/"|

我想念什么?谢谢。

0 个答案:

没有答案