diff --git a/app/models/user.js b/app/models/user.js index bc61b02..d343d10 100644 --- a/app/models/user.js +++ b/app/models/user.js @@ -4,7 +4,6 @@ import { hasMany } from 'ember-data/relationships'; export default Model.extend({ username: attr('string'), - password: attr('string'), adminLevel: attr('number'), projects: hasMany('project', { async: true }), mail: attr('string') diff --git a/app/router.js b/app/router.js index c8d5437..8f2875d 100644 --- a/app/router.js +++ b/app/router.js @@ -28,6 +28,7 @@ Router.map(function() { }); this.route('404', { path: '/*path' }); + this.route('logout'); }); export default Router; diff --git a/app/routes/application.js b/app/routes/application.js index 49d79a7..0596a73 100644 --- a/app/routes/application.js +++ b/app/routes/application.js @@ -13,16 +13,13 @@ export default Ember.Route.extend(ApplicationRouteMixin, { sessionAuthenticated() { this._loadCurrentUser().then(() => { this.transitionTo('/'); - }).catch(() => this.get('session').invalidate()); + }).catch(function(/* reason */) { + //console.log(reason); + this.get('session').invalidate(); + }); }, _loadCurrentUser() { return this.get('sessionUser').loadCurrentUser(); - }, - - actions: { - invalidateSession() { - this.get('session').invalidate(); - } } }); diff --git a/app/routes/logout.js b/app/routes/logout.js new file mode 100644 index 0000000..52daa5f --- /dev/null +++ b/app/routes/logout.js @@ -0,0 +1,8 @@ +import Ember from 'ember'; +import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; + +export default Ember.Route.extend(AuthenticatedRouteMixin, { + beforeModel() { + this.get('session').invalidate(); + } +}); diff --git a/app/services/session-user.js b/app/services/session-user.js index 86d4cd7..5f18491 100644 --- a/app/services/session-user.js +++ b/app/services/session-user.js @@ -10,13 +10,18 @@ export default Ember.Service.extend({ store: service(), loadCurrentUser() { + var _this = this; + return new RSVP.Promise((resolve, reject) => { const token = this.get('session.data.authenticated.token'); if (!Ember.isEmpty(token)) { - return this.get('store').findRecord('user', 'me').then((user) => { - this.set('user', user); + return this.get('store').findRecord('user', 'me').then(function(user) { + _this.set('user', user); resolve(); - }, reject); + }, function() { + _this.get('session').invalidate(); + reject(); + }); } else { resolve(); } diff --git a/app/templates/application.hbs b/app/templates/application.hbs index deb95e2..4621e6e 100644 --- a/app/templates/application.hbs +++ b/app/templates/application.hbs @@ -10,7 +10,7 @@
  • {{#link-to 'index'}}Home{{/link-to}}
  • {{#link-to 'projects'}}Projects{{/link-to}}
  • {{#link-to 'user.edit'}}Preferences{{/link-to}}
  • -
  • Logout
  • +
  • {{#link-to 'logout'}}Logout{{/link-to}}
  • diff --git a/app/templates/login.hbs b/app/templates/login.hbs index 498b585..734af5e 100644 --- a/app/templates/login.hbs +++ b/app/templates/login.hbs @@ -13,7 +13,7 @@ {{#if errorMessage}} -

    {{errorMessage.message}}

    +

    {{errorMessage}}

    {{/if}} diff --git a/app/templates/logout.hbs b/app/templates/logout.hbs new file mode 100644 index 0000000..c24cd68 --- /dev/null +++ b/app/templates/logout.hbs @@ -0,0 +1 @@ +{{outlet}} diff --git a/tests/unit/routes/logout-test.js b/tests/unit/routes/logout-test.js new file mode 100644 index 0000000..64613a0 --- /dev/null +++ b/tests/unit/routes/logout-test.js @@ -0,0 +1,11 @@ +import { moduleFor, test } from 'ember-qunit'; + +moduleFor('route:logout', 'Unit | Route | logout', { + // Specify the other units that are required for this test. + // needs: ['controller:foo'] +}); + +test('it exists', function(assert) { + let route = this.subject(); + assert.ok(route); +}); diff --git a/todo.md b/todo.md index a4fc8ca..b83c6c3 100644 --- a/todo.md +++ b/todo.md @@ -1,8 +1,5 @@ # To-Do - - Logout route - Change password - Create/register user - User management - Rename preferences into account - - ! Don't save user password - - ! Fix user logged-in on invalidate account (after account was deleted)