Skip to content

Instantly share code, notes, and snippets.

@brianally
Created July 2, 2015 18:18
Show Gist options
  • Save brianally/300862be606a49fec8b2 to your computer and use it in GitHub Desktop.
Save brianally/300862be606a49fec8b2 to your computer and use it in GitHub Desktop.
Ember Simple-Auth authenticator for handling manual login and getting OAuth token back from server.
// app/authenticators/admin.js
import Ember from "ember";
import Base from "simple-auth/authenticators/base";
import ENV from "../config/environment";
export default Base.extend({
// called by login form action
// this.get("session").authenticate("authenticator:admin", credentials).then(...)
authenticate: function(credentials) {
return new Ember.RSVP.Promise(function(resolve, reject) {
var userData = {
User: {
email : credentials.email,
password: credentials.password
}
};
var params = {
url : ENV.loginEndpoint,
type : "POST",
data : userData,
dataType : "json"
};
Ember.$.ajax(params).then(function(response) {
Ember.run(function() {
if ( !response.success ) {
// shouldn't reach here as errors should flow to error handler below
console.log(response);
reject(response.message);
}
else {
// make both token and user data available in session
resolve({
access_token: response.data.token,
expires : response.data.expires,
user : response.data.user
});
}
});
}, function(xhr, status, error) {
Ember.run(function() {
reject(xhr.responseJSON.data.message);
});
});
});
},
// called on page refresh
restore: function(data) {
return new Ember.RSVP.Promise(function(resolve, reject) {
if (!Ember.isEmpty(data.access_token)) {
// log user in
resolve(data);
} else {
// send to /login
reject();
}
});
},
invalidate: function(data) {
return new Ember.RSVP.Promise(function(resolve, reject) {
Ember.$.ajax({
url : ENV.logoutEndpoint,
type : "POST",
data : {User: {id: data.userData.id}},
dataType: "json",
headers : {
"Authorize": "Bearer " + data.access_token
}
}).then(function(response) {
Ember.run(function() {
resolve();
});
}, function(xhr, status, error) {
var response = JSON.parse(xhr.responseText);
Ember.run(function() {
reject(response.error);
});
});
});
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment