Skip to content

Instantly share code, notes, and snippets.

@colindensem
Forked from kylewelsby/sessions_controller.rb
Last active December 16, 2015 19:50
Show Gist options
  • Save colindensem/5487963 to your computer and use it in GitHub Desktop.
Save colindensem/5487963 to your computer and use it in GitHub Desktop.
.run(['$cookies', 'user', 'forge', function($cookies, user, forge){
//Check for cookies.
var token = $cookies["X-Shrug-Token"];
if( token ) {
forge.sessions.get({id: token},
function success(data) {
user.login(data);
},
function error() {
user.logout();
})
} else {
//clear
console.log('no token');
user.logout();
}
}]);
'use strict';
appCtrl.controller('LoginCtrl',['$scope','forge', 'user', '$route', '$location', function($scope, forge, user, $route,
$location) {
$scope.login = function (){
$scope.authError = null;
forge.login($scope.username, $scope.password).then(
function success(response) {
if(response && response.data) {
user.login(response.data);
$scope.username = $scope.password = null;
$route.reload();
}
},
function error(response) {
console.log(response);
if(response && response.status===401) {
$scope.authError = 'Access Denied. Try Again.';
}else{
// problem with request to server
$scope.authError = 'Login Server offline, please try later';
}
});
},
$scope.logout = function(){
user.logout();
$location.path('/');
}
}]);
class Api::SessionsController < Devise::SessionsController
before_filter :authenticate_user!, :except=>[:create]
respond_to :json
def show
render :status => 200,
:json => { :success => true,
:info => "Logged in",
:user => current_user,
:auth_token => current_user.authentication_token }
end
def create
resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#failure")
render :status => 200,
:json => { :success => true,
:info => "Logged in",
:user => current_user,
:auth_token => current_user.authentication_token }
end
def destroy
warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#failure")
current_user.update_column(:authentication_token, nil)
sign_out
render :status => 200,
:json => { :success => true,
:info => "Logged out",
:csrfParam => request_forgery_protection_token,
:csrfToken => form_authenticity_token
}
end
def failure
render :status => 401,
:json => { :success => false,
:info => "Login Credentials Failed"
}
end
end
var service = {
login: function(sessionData){
// console.log(sessionData);
$cookies["X-Shrug-Token"] = sessionData.auth_token;
$http.defaults.headers.common['X-Shrug-Token']=sessionData.auth_token;
tokenHandler.set( sessionData.auth_token );
$rootScope.loggedUser = new forge.users(sessionData.user);
// console.log($rootScope.loggedUser);
$rootScope.$broadcast('user_login', $rootScope.loggedUser)
},
logout: function() {
var session = $cookies["X-Shrug-Token"];
delete $cookies["X-Shrug-Token"];
tokenHandler.clear();
session && forge.sessions.delete({id: session},
function(data) {
$http.defaults.headers.common['X-CSRF-Token'] =
data["csrfToken"];
}, {});
$rootScope.loggedUser = null;
$rootScope.$broadcast('user_logout', $rootScope.loggedUser)
}
}
return service;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment