You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

authentication.js 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import Vue from 'vue';
  2. import Vuex from 'vuex';
  3. import axios from 'axios';
  4. import log from '../../../assets/Log';
  5. Vue.use(Vuex);
  6. export default {
  7. namespaced: true,
  8. state: {
  9. username: 'UniVate2018',
  10. password: 'UniVate2018',
  11. isLoggedIn: log.isLoggedIn(),
  12. flag: false,
  13. status: undefined,
  14. token: undefined,
  15. user: undefined,
  16. person: undefined,
  17. agency: undefined,
  18. },
  19. mutations: {
  20. auth_request(state) {
  21. state.status = 'loading';
  22. },
  23. auth_success(state, user) {
  24. state.status = 'success';
  25. state.token = user.token;
  26. state.user = user.user;
  27. state.person = user.person;
  28. state.agency = user.agency;
  29. },
  30. auth_error(state) {
  31. state.status = 'error';
  32. },
  33. logout(state) {
  34. state.status = undefined;
  35. state.token = undefined;
  36. state.person = undefined;
  37. state.agency = undefined;
  38. state.user = undefined;
  39. },
  40. runInit(state, item) {
  41. state.flag = true;
  42. state.user = item.user;
  43. state.token = item.token;
  44. state.person = item.person;
  45. state.agency = item.agency;
  46. },
  47. updateFlag(state) {
  48. state.flag = true;
  49. },
  50. },
  51. getters: {
  52. authStatus: state => state.status,
  53. },
  54. actions: {
  55. init({
  56. commit,
  57. }) {
  58. console.log('init');
  59. if (!log.isLoggedIn() && log.tokenExpired) {
  60. log.clearValues();
  61. } else log.updateTokenExpiry();
  62. commit('runInit', {
  63. user: log.getJSONObject('user'),
  64. token: log.getJSONObject('token'),
  65. person: log.getJSONObject('person'),
  66. agency: log.getJSONObject('agency'),
  67. });
  68. },
  69. login({
  70. commit,
  71. state,
  72. }) {
  73. return new Promise((reject) => {
  74. console.log(state.username);
  75. commit('auth_request');
  76. const user = {
  77. username: state.username,
  78. password: state.password,
  79. };
  80. axios({
  81. url: '/api/register/authenticate',
  82. data: user,
  83. method: 'POST',
  84. })
  85. .then((resp) => {
  86. console.log(resp);
  87. log.clearValues();
  88. log.setValues(resp.data);
  89. commit('auth_success', resp.data);
  90. })
  91. .catch((err) => {
  92. console.log(err);
  93. commit('auth_error');
  94. log.clearValues();
  95. reject(err);
  96. });
  97. });
  98. },
  99. logout({
  100. commit,
  101. }) {
  102. return new Promise(() => {
  103. commit('logout');
  104. log.clearValues();
  105. delete axios.defaults.headers.common.Authorization;
  106. });
  107. },
  108. },
  109. };