您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

authentication.js 1.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import Vue from 'vue';
  2. import Vuex from 'vuex';
  3. import axios from 'axios';
  4. Vue.use(Vuex);
  5. export default {
  6. namespaced: true,
  7. state: {
  8. status: '',
  9. token: sessionStorage.getItem('token') || '',
  10. user: {},
  11. individual: {},
  12. },
  13. mutations: {
  14. auth_request(state) {
  15. state.status = 'loading';
  16. },
  17. auth_success(state, token, user) {
  18. state.status = 'success';
  19. state.token = token;
  20. state.user = user;
  21. },
  22. auth_error(state) {
  23. state.status = 'error';
  24. },
  25. logout(state) {
  26. state.status = '';
  27. state.token = '';
  28. },
  29. },
  30. getters: {
  31. isLoggedIn: state => !!state.token,
  32. authStatus: state => state.status,
  33. },
  34. actions: {
  35. login({ commit }, user) {
  36. return new Promise((reject) => {
  37. commit('auth_request');
  38. axios({
  39. url: '/api/register/authenticate',
  40. data: user,
  41. method: 'POST',
  42. })
  43. .then((resp) => {
  44. console.log(resp.data);
  45. sessionStorage.setItem('token', resp.data.token);
  46. sessionStorage.setItem('username', resp.data.username);
  47. sessionStorage.setItem('name', resp.data.name);
  48. commit('auth_success', resp.data.token, resp.data);
  49. })
  50. .catch((err) => {
  51. commit('auth_error');
  52. sessionStorage.removeItem('token');
  53. sessionStorage.removeItem('username');
  54. sessionStorage.removeItem('name');
  55. reject(err);
  56. });
  57. });
  58. },
  59. logout({ commit }) {
  60. return new Promise(() => {
  61. commit('logout');
  62. sessionStorage.removeItem('token');
  63. sessionStorage.removeItem('username');
  64. sessionStorage.removeItem('name');
  65. delete axios.defaults.headers.common.Authorization;
  66. });
  67. },
  68. },
  69. };