import fetch from 'node-fetch' import jsonwebtoken from 'jsonwebtoken' import * as types from 'app/types' import { session } from 'app/session' const urls = { login: "/api/v1/auth/login", } export const login = data => dispatch => ( fetch(urls.login, { method: 'POST', body: JSON.stringify(data), credentials: 'same-origin', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' } }) .then(req => req.json()) .then(res => { if (!res.token) { throw new Error(res.description) } session.set('access_token', res.token) load_access_token()(dispatch) }) ) export const load_access_token = () => dispatch => { const access_token = session.get('access_token') || null if (access_token) { const creds = jsonwebtoken.decode(access_token) return dispatch({ type: types.auth.logged_in, user: creds.sub }) } else { return dispatch({ type: types.auth.logged_out }) } } export const logout = (e) => dispatch => { e && e.preventDefault() session.set('access_token', '') return dispatch({ type: types.auth.logged_out }) }