diff --git a/src/router/index.js b/src/router/index.js
index 4b2a449..f2600b1 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -1,64 +1,68 @@
import { createRouter, createWebHistory } from 'vue-router'
+const routes = [
+ {
+ path: '/',
+ name: 'home',
+ component: () => import('@/views/Home.vue')
+ },
+ {
+ path: '/auth/daftar',
+ name: 'auth.register',
+ component: () => import('@/views/auth/Register.vue')
+ },
+ {
+ path: '/auth/masuk',
+ name: 'auth.login',
+ component: () => import('@/views/auth/Login.vue')
+ },
+ {
+ path: '/auth/lupa-password',
+ name: 'auth.forget',
+ component: () => import('@/views/auth/Forget.vue')
+ },
+ {
+ path: '/tim/:id/diskusi',
+ name: 'tim.diskusi',
+ component: () => import('@/views/team/Discussion.vue')
+ },
+ {
+ path: '/tim/:id/tugas',
+ name: 'tim.tugas',
+ component: () => import('@/views/team/Assignment.vue')
+ },
+ {
+ path: '/profil/setelan',
+ name: 'profil.setelan',
+ component: () => import('@/views/profile/Setting.vue')
+ },
+ {
+ path: '/profil/tim',
+ name: 'profil.tim',
+ component: () => import('@/views/profile/Team.vue')
+ },
+ {
+ path: '/profil/kelas',
+ name: 'profil.kelas',
+ component: () => import('@/views/profile/Class.vue')
+ },
+]
+
const router = createRouter({
history: createWebHistory(),
- routes: [
- {
- path: '/auth/daftar',
- name: 'auth.register',
- component: () => import('@/views/auth/Register.vue')
- },
- {
- path: '/auth/masuk',
- name: 'auth.login',
- component: () => import('@/views/auth/Login.vue')
- },
- {
- path: '/auth/lupa-password',
- name: 'auth.forget',
- component: () => import('@/views/auth/Forget.vue')
- },
- {
- path: '/tim/:id/diskusi',
- name: 'tim.diskusi',
- component: () => import('@/views/team/Discussion.vue')
- },
- {
- path: '/tim/:id/tugas',
- name: 'tim.tugas',
- component: () => import('@/views/team/Assignment.vue')
- },
- {
- path: '/profil/setelan',
- name: 'profil.setelan',
- component: () => import('@/views/profile/Setting.vue')
- },
- {
- path: '/profil/tim',
- name: 'profil.tim',
- component: () => import('@/views/profile/Team.vue')
- },
- {
- path: '/profil/kelas',
- name: 'profil.kelas',
- component: () => import('@/views/profile/Class.vue')
- },
- // {
- // path: '/',
- // name: 'user.index',
- // component: () => import('@/views/user/Index.vue')
- // },
- // {
- // path: '/create',
- // name: 'user.create',
- // component: () => import('@/views/user/Create.vue')
- // },
- // {
- // path: '/edit/:id',
- // name: 'user.edit',
- // component: () => import('@/views/user/Edit.vue')
- // },
- ]
+ routes
+})
+
+router.beforeEach((to, from, next) => {
+ if (to.matched.some(record => record.meta.requiresAuth)) {
+ if (store.getters.isLoggedIn) {
+ next()
+ return
+ }
+ next('/')
+ } else {
+ next()
+ }
})
export default router
diff --git a/src/store/index.js b/src/store/index.js
new file mode 100644
index 0000000..f3be933
--- /dev/null
+++ b/src/store/index.js
@@ -0,0 +1,125 @@
+import { createStore } from 'vuex'
+import axios from 'axios'
+
+export default createStore({
+ state: {
+ success: '',
+ token: localStorage.getItem('token') || '',
+ user: {}
+ },
+
+ mutations: {
+ AUTH_REQUEST(state) {
+ state.status = 'loading'
+ },
+
+ AUTH_SUCCESS(state, token, user) {
+ state.status = 'success'
+ state.token = token
+ state.user = user
+ },
+
+ AUTH_ERROR(state) {
+ state.status = 'error'
+ },
+
+ AUTH_LOGOUT(state) {
+ state.status = ''
+ state.token = ''
+ },
+
+ },
+
+ actions: {
+ LOGIN({ commit }, user) {
+
+ return new Promise((resolve, reject) => {
+
+ commit('AUTH_REQUEST')
+ axios.post('http://laravel-jwt.test/api/login', {
+
+ email: user.email,
+ password: user.password
+
+ })
+
+ .then(response => {
+
+ const token = response.data.token
+ const user = response.data.user
+
+ localStorage.setItem('token', token)
+ localStorage.setItem('user', JSON.stringify(user))
+
+ axios.defaults.headers.common['Authorization'] = "Bearer" +token
+ commit('AUTH_SUCCESS', token, user)
+
+ resolve(response)
+
+ }).catch(err => {
+
+ commit('AUTH_ERROR')
+ localStorage.removeItem('token')
+
+ reject(err)
+
+ })
+ })
+ },
+
+ REGISTER({ commit }, user) {
+
+ return new Promise((resolve, reject) => {
+
+ commit('AUTH_REQUEST')
+ axios.post('http://laravel-jwt.test/api/register', {
+
+ name: user.name,
+ email: user.email,
+ password: user.password
+
+ })
+
+ .then(response => {
+
+ const token = response.data.token
+ const user = response.data.user
+
+ localStorage.setItem('token', token)
+ localStorage.setItem('user', JSON.stringify(user))
+
+ axios.defaults.headers.common['Authorization'] = "Bearer" +token
+ commit('AUTH_SUCCESS', token, user)
+
+ resolve(response)
+
+ }).catch(err => {
+
+ commit('AUTH_ERROR')
+ localStorage.removeItem('token')
+
+ reject(err)
+
+ })
+ })
+ },
+
+ LOGOUT({ commit }) {
+ return new Promise((resolve) => {
+ commit('AUTH_LOGOUT')
+ localStorage.removeItem('token')
+ localStorage.removeItem('user')
+ delete axios.defaults.headers.common['Authorization']
+ resolve()
+ })
+ }
+ },
+
+ getters: {
+ isLoggedIn: state => !!state.token,
+ authStatus: state => state.status,
+ },
+
+ modules: {
+ }
+})
\ No newline at end of file
diff --git a/src/views/Home.vue b/src/views/Home.vue
new file mode 100644
index 0000000..80e4e1c
--- /dev/null
+++ b/src/views/Home.vue
@@ -0,0 +1,211 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Previous
+
+
+
+ Next
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/auth/Forget.vue b/src/views/auth/Forget.vue
index b087b16..be7e059 100644
--- a/src/views/auth/Forget.vue
+++ b/src/views/auth/Forget.vue
@@ -1,6 +1,6 @@
diff --git a/src/views/auth/Login.vue b/src/views/auth/Login.vue
index 508912b..5182750 100644
--- a/src/views/auth/Login.vue
+++ b/src/views/auth/Login.vue
@@ -23,7 +23,7 @@ import footerComponent from '../../components/Footer.vue'