added (not yet working) code for login

This commit is contained in:
2019-03-14 17:13:24 +01:00
parent 18f22fdffa
commit 2cff1db5cb
17 changed files with 710 additions and 1 deletions

1
src/services/index.ts Normal file
View File

@@ -0,0 +1 @@
export * from './user.service';

View File

@@ -0,0 +1,113 @@
import { authHeader } from '@/helpers';
export const userService = {
login,
logout,
register,
getAll,
getById,
update,
delete: _delete,
};
// @ts-ignore
function login(username, password) {
const requestOptions = {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username, password }),
};
return fetch(`${process.env.API_URL}/users/authenticate`, requestOptions)
.then(handleResponse)
.then((user) => {
// login successful if there's a jwt token in the response
if (user.token) {
// store user details and jwt token in local storage to keep user logged in between page refreshes
localStorage.setItem('user', JSON.stringify(user));
}
return user;
});
}
function logout() {
// remove user from local storage to log user out
localStorage.removeItem('user');
}
// @ts-ignore
function register(user) {
const requestOptions = {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(user),
};
return fetch(`${process.env.API_URL}/users/register`, requestOptions).then(handleResponse);
}
function getAll() {
const requestOptions = {
method: 'GET',
headers: authHeader(),
};
// @ts-ignore
return fetch(`${config.apiUrl}/users`, requestOptions).then(handleResponse);
}
// @ts-ignore
function getById(id) {
const requestOptions = {
method: 'GET',
headers: authHeader(),
};
// @ts-ignore
return fetch(`${config.apiUrl}/users/${id}`, requestOptions).then(handleResponse);
}
// @ts-ignore
function update(user) {
const requestOptions = {
method: 'PUT',
headers: { ...authHeader(), 'Content-Type': 'application/json' },
body: JSON.stringify(user),
};
// @ts-ignore
return fetch(`${config.apiUrl}/users/${user.id}`, requestOptions).then(handleResponse);
}
// prefixed function name with underscore because delete is a reserved word in javascript
// @ts-ignore
function _delete(id) {
const requestOptions = {
method: 'DELETE',
headers: authHeader(),
};
// @ts-ignore
return fetch(`${config.apiUrl}/users/${id}`, requestOptions).then(handleResponse);
}
// @ts-ignore
function handleResponse(response) {
return response.text().then((text: any) => {
const data = text && JSON.parse(text);
if (!response.ok) {
if (response.status === 401) {
// auto logout if 401 response returned from api
logout();
location.reload(true);
}
const error = (data && data.message) || response.statusText;
return Promise.reject(error);
}
return data;
});
}