user.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. import { REST } from 'vuejs/api/rest-axios'
  2. import { JSONAPI } from 'vuejs/api/json-axios'
  3. import qs from 'querystring'
  4. export default {
  5. namespaced: true,
  6. // initial state
  7. state : {
  8. uid:null,
  9. // username: '',
  10. mail:'',
  11. token: null,
  12. csrftoken: null,
  13. logout_token: null,
  14. isloggedin: false,
  15. isAdmin: false,
  16. isAdherent: false,
  17. canSearch: false,
  18. roles: []
  19. },
  20. // getters
  21. getters : {},
  22. // mutations
  23. mutations : {
  24. SetCsrftoken (state, token) {
  25. state.csrftoken = token
  26. },
  27. setToken (state, data) {
  28. state.uid = data.current_user.uid
  29. // state.username = data.username
  30. state.mail = data.current_user.mail
  31. state.token = data.csrf_token
  32. state.isloggedin = true
  33. state.logout_token = data.logout_token
  34. },
  35. setUid (state, uid) {
  36. state.uid = uid
  37. state.isloggedin = true
  38. },
  39. setUser (state, data) {
  40. state.mail = data.mail[0].value
  41. state.uuid = data.uuid[0].value
  42. },
  43. setRoles (state, roles) {
  44. console.log("User setRoles", roles);
  45. state.roles = []
  46. for (var i = 0; i < roles.length; i++) {
  47. state.roles.push(roles[i].target_id)
  48. }
  49. // check if admin
  50. if(state.roles.indexOf('admin') != -1 || state.roles.indexOf('root') != -1){
  51. // console.log('is admin');
  52. state.isAdmin = true
  53. }
  54. // check if has access to search
  55. if(state.roles.indexOf('adherent') != -1){
  56. // console.log('is admin');
  57. state.canSearch = true
  58. state.isAdherent = true
  59. }
  60. },
  61. setLoggedOut (state) {
  62. console.log("setLoggedOut state", state);
  63. state.uid= null
  64. state.mail = ''
  65. state.token = null
  66. state.isloggedin = false
  67. state.logout_token = null
  68. if (state.isAdmin){
  69. // TODO: what if on a page where login is needed (as commerce checkout and cart)
  70. window.location.reload(true);
  71. }
  72. state.asAdmin = false
  73. state.canSearch = false
  74. }
  75. },
  76. // actions
  77. actions : {
  78. userRegister({ dispatch, commit, state }, credentials){
  79. return new Promise((resolve, reject) => {
  80. REST.get('/session/token')
  81. .then(({token}) => {
  82. commit('SetCsrftoken', token)
  83. REST.post('/user/register?_format=json',
  84. credentials,
  85. {'X-CSRF-Token':state.csrftoken}
  86. )
  87. .then(({ data }) => {
  88. console.log('user REST registered', data);
  89. dispatch('userLogin', credentials)
  90. .then(() => {
  91. resolve()
  92. })
  93. })
  94. .catch(( error ) => {
  95. console.warn('Issue with register', error)
  96. Promise.reject(error)
  97. })
  98. })
  99. })
  100. },
  101. userLogin({ dispatch, commit, state }, credentials){
  102. return new Promise((resolve, reject) => {
  103. dispatch('getToken', credentials)
  104. .then(() => {
  105. dispatch('getUser').then((userdata) => {
  106. console.log('User Loggedin');
  107. if (state.isAdmin){
  108. window.location.reload(true);
  109. }
  110. resolve()
  111. })
  112. })
  113. })
  114. },
  115. getToken ({ dispatch, commit, state }, credentials) {
  116. return REST.post('/user/login?_format=json', credentials)
  117. .then(({ data }) => {
  118. console.log('user REST getToken data', data)
  119. commit('setToken', data)
  120. })
  121. .catch(( error ) => {
  122. console.warn('Issue with getToken', error)
  123. Promise.reject(error)
  124. })
  125. },
  126. getUser ({ dispatch, commit, state }) {
  127. let params = {
  128. token: state.token
  129. }
  130. return REST.get(`/user/${state.uid}?_format=json`, params)
  131. .then(({ data }) => {
  132. console.log('user REST getUser data', data)
  133. console.log('roles', data['roles'])
  134. commit('setUser', data)
  135. if(data.roles){
  136. commit('setRoles', data.roles)
  137. }
  138. })
  139. .catch(( error ) => {
  140. console.warn('Issue with getUser', error)
  141. Promise.reject(error)
  142. })
  143. },
  144. userLogout ({ commit, state }) {
  145. let credentials = qs.stringify({
  146. token: state.token
  147. })
  148. REST.post('/user/logout', credentials)
  149. .then((resp) => {
  150. console.log('userLogout resp', resp)
  151. commit('setLoggedOut')
  152. })
  153. .catch(( error ) => {
  154. console.warn('Issue with logout', error)
  155. Promise.reject(error)
  156. })
  157. }
  158. }
  159. }