Skip to content

Commit

Permalink
Added resumeLoginPromise. Updated docs
Browse files Browse the repository at this point in the history
  • Loading branch information
Paolo Scanferla committed May 9, 2014
1 parent 53a1c56 commit e4edf33
Show file tree
Hide file tree
Showing 8 changed files with 65 additions and 55 deletions.
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,14 @@ The [Asteroid client](http://s27.postimg.org/hc1qjnjsz/Asteroid.png), which incl

Creates a new Asteroid instance, that is, a connection to a
Meteor server (via DDP).

After being constructed, the instance will connect itself
to the Meteor backend.
to the Meteor backend. It will also try, upon connection,
to resume a previous login session (with a token saved in
localstorage). The `Asteroid.resumeLoginPromise` property
stores a promise which will be resolved if the resume was
successful, rejected otherwise.

If `SockJS` is defined, it will be used as the socket
transport. Otherwise `WebSocket` will be used. Note that
`SockJS` is required for IE9 support.
Expand Down
2 changes: 1 addition & 1 deletion bower.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "asteroid",
"version": "0.2.3",
"version": "0.2.4",
"homepage": "https://github.com/mondora/asteroid",
"authors": [
"Paolo Scanferla <[email protected]>"
Expand Down
49 changes: 24 additions & 25 deletions dist/asteroid.js
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,8 @@ Asteroid.prototype._init = function () {
// Register handlers
self.ddp.on("connected", function () {
// Upon connection, try resuming the login
self._tryResumeLogin();
// Save the pormise it returns
self.resumeLoginPromise = self._tryResumeLogin();
// Subscribe to the meteor.loginServiceConfiguration
// collection, which holds the configuration options
// to login via third party services (oauth).
Expand Down Expand Up @@ -678,33 +679,31 @@ Asteroid.prototype._initOauthLogin = function (service, credentialToken, loginUr

Asteroid.prototype._tryResumeLogin = function () {
var self = this;
var deferred = Q.defer();
var token = localStorage[self._host + "__login_token__"];
if (!token) {
return;
deferred.reject("No login token");
return deferred.promise;
}
return Q()
.then(function () {
var deferred = Q.defer();
var loginParameters = {
resume: token
};
self.ddp.method("login", [loginParameters], function (err, res) {
if (err) {
delete self.userId;
delete self.loggedIn;
delete localStorage[self._host + "__login_token__"];
self._emit("loginError", err);
deferred.reject(err);
} else {
self.userId = res.id;
self.loggedIn = true;
localStorage[self._host + "__login_token__"] = res.token;
self._emit("login", res.id);
deferred.resolve(res.id);
}
});
return deferred.promise;
});
var loginParameters = {
resume: token
};
self.ddp.method("login", [loginParameters], function (err, res) {
if (err) {
delete self.userId;
delete self.loggedIn;
delete localStorage[self._host + "__login_token__"];
self._emit("loginError", err);
deferred.reject(err);
} else {
self.userId = res.id;
self.loggedIn = true;
localStorage[self._host + "__login_token__"] = res.token;
self._emit("login", res.id);
deferred.resolve(res.id);
}
});
return deferred.promise;
};

Asteroid.prototype.loginWithFacebook = function (scope) {
Expand Down
2 changes: 1 addition & 1 deletion dist/asteroid.min.js

Large diffs are not rendered by default.

8 changes: 7 additions & 1 deletion docs/asteroid.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,14 @@

Creates a new Asteroid instance, that is, a connection to a
Meteor server (via DDP).

After being constructed, the instance will connect itself
to the Meteor backend.
to the Meteor backend. It will also try, upon connection,
to resume a previous login session (with a token saved in
localstorage). The `Asteroid.resumeLoginPromise` property
stores a promise which will be resolved if the resume was
successful, rejected otherwise.

If `SockJS` is defined, it will be used as the socket
transport. Otherwise `WebSocket` will be used. Note that
`SockJS` is required for IE9 support.
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "asteroid",
"version": "0.2.3",
"version": "0.2.4",
"description": "Aletrnative Meteor client",
"main": "dist/asteroid.js",
"scripts": {
Expand Down
3 changes: 2 additions & 1 deletion src/asteroid.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ Asteroid.prototype._init = function () {
// Register handlers
self.ddp.on("connected", function () {
// Upon connection, try resuming the login
self._tryResumeLogin();
// Save the pormise it returns
self.resumeLoginPromise = self._tryResumeLogin();
// Subscribe to the meteor.loginServiceConfiguration
// collection, which holds the configuration options
// to login via third party services (oauth).
Expand Down
46 changes: 22 additions & 24 deletions src/login.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,33 +48,31 @@ Asteroid.prototype._initOauthLogin = function (service, credentialToken, loginUr

Asteroid.prototype._tryResumeLogin = function () {
var self = this;
var deferred = Q.defer();
var token = localStorage[self._host + "__login_token__"];
if (!token) {
return;
deferred.reject("No login token");
return deferred.promise;
}
return Q()
.then(function () {
var deferred = Q.defer();
var loginParameters = {
resume: token
};
self.ddp.method("login", [loginParameters], function (err, res) {
if (err) {
delete self.userId;
delete self.loggedIn;
delete localStorage[self._host + "__login_token__"];
self._emit("loginError", err);
deferred.reject(err);
} else {
self.userId = res.id;
self.loggedIn = true;
localStorage[self._host + "__login_token__"] = res.token;
self._emit("login", res.id);
deferred.resolve(res.id);
}
});
return deferred.promise;
});
var loginParameters = {
resume: token
};
self.ddp.method("login", [loginParameters], function (err, res) {
if (err) {
delete self.userId;
delete self.loggedIn;
delete localStorage[self._host + "__login_token__"];
self._emit("loginError", err);
deferred.reject(err);
} else {
self.userId = res.id;
self.loggedIn = true;
localStorage[self._host + "__login_token__"] = res.token;
self._emit("login", res.id);
deferred.resolve(res.id);
}
});
return deferred.promise;
};

Asteroid.prototype.loginWithFacebook = function (scope) {
Expand Down

0 comments on commit e4edf33

Please sign in to comment.