vue-token-fix
Version:
Simple token storage/ authorization in vuejs.
98 lines (71 loc) • 2.19 kB
JavaScript
const Auth = {
install(vue, options = { loginUrl: "/api/login", signupUrl: "/api/users", logoutUrl: "/api/logout"}) {
vue.prototype.$auth = new Authenticate(vue, options.loginUrl, options.signupUrl, options.logoutUrl);
vue.http.interceptors.push((request, next) => {
if (!request.headers.hasOwnProperty('Authorization')) {
request.headers['Authorization'] = localStorage.getItem("token");
}
next();
});
}
}
if (typeof exports == "object") {
// Export
module.exports = Auth;
} else if (window.Vue) {
// Vue use if vue is being used on the page
Vue.use(Auth);
}
class Authenticate {
constructor(context, loginUrl, signupUrl, logoutUrl) {
this.authenticated = this.check();
this.loginUrl = loginUrl;
this.signupUrl = signupUrl;
this.logoutUrl = logoutUrl;
context = context;
}
login(context, input, redirect = false, errorHandler = false) {
context.$http.post(this.loginUrl, input).then((response) => {
setToken(response.data.bearerToken);
this.authenticated = true;
if(redirect)redirectMe(context, redirect);
}, handleErrors(errorHandler));
}
logout(context, redirect = false, errorHandler = false) {
context.$http.get(this.logoutUrl).then((response) => {
removeToken();
this.authenticated = false;
if(redirect)redirectMe(context, redirect);
}, handleErrors(errorHandler));
}
check() {
validToken(getToken());
}
}
function redirectMe(context, redirect) {
if (redirect !== false) {
context.$router.go(redirect);
}
}
function validToken(token) {
if (typeof token != "undefined" && token != null) {
return true;
}
return false;
}
function handleErrors(errorHandler) {
return (errors) => {
if (errorHandler !== false) {
errorHandler(errors);
}
}
}
function getToken() {
return localStorage.getItem("token")
}
function setToken(token) {
localStorage.setItem("token", "Bearer" + token);
}
function removeToken() {
localStorage.removeItem("token")
}