Skip to content

Commit 5f6a337

Browse files
unnecessary vuex stores remove, code structure improvement
using tab instead of space, tab size 2, unnecessary vuex store mudule removed, used noty as notification plugin, better code structure
1 parent d477940 commit 5f6a337

33 files changed

+758
-962
lines changed

app/Http/Controllers/AuthenticateController.php

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,27 @@
88

99
class AuthenticateController extends Controller
1010
{
11-
public function authenticate(Request $request)
12-
{
13-
$rules = [
14-
'email' => 'required|email',
15-
'password' => 'required'
16-
];
17-
18-
$this->validate($request, $rules);
19-
20-
$credentials = $request->only('email', 'password');
21-
22-
try {
23-
if (! $token = JWTAuth::attempt($credentials)) {
24-
return response()->json(['error' => 'Invalid Login Credential'], 401);
25-
}
26-
} catch (JWTException $e) {
27-
return response()->json(['error' => 'Could not create token'], 500);
28-
}
29-
30-
return response()->json(compact('token'));
31-
}
11+
public function authenticate(Request $request)
12+
{
13+
$rules = [
14+
'email' => 'required|email',
15+
'password' => 'required'
16+
];
17+
18+
$this->validate($request, $rules);
19+
20+
$credentials = $request->only('email', 'password');
21+
22+
try {
23+
if(!$token = JWTAuth::attempt($credentials)) {
24+
return response()->json(['error' => 'Invalid Login Credential'], 401);
25+
}
26+
} catch(JWTException $e) {
27+
return response()->json(['error' => 'Could not create token'], 500);
28+
}
29+
30+
$user = $request->user();
31+
32+
return response()->json(compact('token', 'user'));
33+
}
3234
}

app/Http/Controllers/UserController.php

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -6,41 +6,41 @@
66

77
class UserController extends Controller
88
{
9-
public function show(Request $request)
10-
{
11-
return $request->user();
12-
}
13-
14-
public function updateProfile(Request $request)
15-
{
16-
$rules = [
17-
'name' => 'required',
18-
'email' => 'required|email|',
19-
];
20-
21-
$this->validate($request, $rules);
22-
23-
$user = $request->user();
24-
$user->name = $request->input('name');
25-
$user->email = $request->input('email');
26-
$user->save();
27-
28-
return response()->json(compact('user'));
29-
}
30-
31-
public function updatePassword(Request $request)
32-
{
33-
$rules = [
34-
'new_password' => 'required',
35-
'confirm_new_password' => 'required|same:new_password'
36-
];
37-
38-
$this->validate($request, $rules);
39-
40-
$user = $request->user();
41-
$user->password = bcrypt($request->input('new_password'));
42-
$user->saveOrFail();
43-
44-
return response()->json(compact('user'));
45-
}
9+
public function show(Request $request)
10+
{
11+
return $request->user();
12+
}
13+
14+
public function updateProfile(Request $request)
15+
{
16+
$rules = [
17+
'name' => 'required',
18+
'email' => 'required|email|',
19+
];
20+
21+
$this->validate($request, $rules);
22+
23+
$user = $request->user();
24+
$user->name = $request->input('name');
25+
$user->email = $request->input('email');
26+
$user->save();
27+
28+
return response()->json(compact('user'));
29+
}
30+
31+
public function updatePassword(Request $request)
32+
{
33+
$rules = [
34+
'new_password' => 'required',
35+
'confirm_new_password' => 'required|same:new_password'
36+
];
37+
38+
$this->validate($request, $rules);
39+
40+
$user = $request->user();
41+
$user->password = bcrypt($request->input('new_password'));
42+
$user->saveOrFail();
43+
44+
return response()->json(compact('user'));
45+
}
4646
}

package-lock.json

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616
"cross-env": "^5.1",
1717
"jquery": "^3.2",
1818
"laravel-mix": "^1.0",
19-
"lodash": "^4.17.4",
2019
"vue": "^2.5.7",
2120
"vue-router": "^3.0.1",
21+
"vuejs-noty": "^0.1.2",
2222
"vuex": "^3.0.1"
2323
},
2424
"dependencies": {}

public/css/app.css

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/js/app.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

resources/assets/js/app.js

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,58 @@
11
import $ from 'jquery';
2-
import _ from 'lodash';
32
import Vue from 'vue';
3+
import VueNoty from 'vuejs-noty';
44
import axios from 'axios';
55

66
window.$ = window.jQuery = $;
77
window.axios = axios;
88
require('bootstrap-sass');
99

10+
Vue.use(VueNoty, {
11+
progressBar: false,
12+
layout: 'bottomRight',
13+
theme: 'bootstrap-v3',
14+
timeout: 5000
15+
});
1016

11-
import router from './routes';
17+
import router from './router';
1218
import store from './store/index';
1319
import App from './components/App.vue';
1420
import jwtToken from './helpers/jwt-token';
1521

1622
axios.interceptors.request.use(config => {
17-
config.headers['X-CSRF-TOKEN'] = window.Laravel.csrfToken;
18-
config.headers['X-Requested-With'] = 'XMLHttpRequest';
23+
config.headers['X-CSRF-TOKEN'] = window.Laravel.csrfToken;
24+
config.headers['X-Requested-With'] = 'XMLHttpRequest';
1925

20-
if(jwtToken.getToken()) {
21-
config.headers['Authorization'] = 'Bearer '+ jwtToken.getToken();
22-
}
26+
if (jwtToken.getToken()) {
27+
config.headers['Authorization'] = 'Bearer ' + jwtToken.getToken();
28+
}
2329

24-
return config;
30+
return config;
2531
}, error => {
26-
return Promise.reject(error);
32+
return Promise.reject(error);
2733
});
2834

2935
axios.interceptors.response.use(response => {
30-
return response;
36+
return response;
3137
}, error => {
32-
let errorResponseData = error.response.data;
38+
let errorResponseData = error.response.data;
39+
40+
const errors = ["token_invalid", "token_expired", "token_not_provided"];
3341

34-
if(errorResponseData.error && (errorResponseData.error === "token_invalid" || errorResponseData.error === "token_expired" || errorResponseData.error === 'token_not_provided')) {
35-
store.dispatch('logoutRequest')
36-
.then(()=> {
37-
router.push({name: 'login'});
38-
});
39-
}
42+
if (errorResponseData.error && errors.includes(errorResponseData.error)) {
43+
store.dispatch('unsetAuthUser')
44+
.then(() => {
45+
jwtToken.removeToken();
46+
router.push({name: 'login'});
47+
});
48+
}
4049

41-
return Promise.reject(error);
50+
return Promise.reject(error);
4251
});
4352

4453
Vue.component('app', App);
4554

4655
const app = new Vue({
47-
router,
48-
store
56+
router,
57+
store
4958
}).$mount('#app');
Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,21 @@
11
<template>
2-
<div>
3-
<top-menu></top-menu>
4-
<notification></notification>
5-
<transition name="fade" mode="out-in">
6-
<router-view></router-view>
7-
</transition>
8-
<app-footer></app-footer>
9-
</div>
2+
<div>
3+
<top-menu></top-menu>
4+
<transition name="fade" mode="out-in">
5+
<router-view></router-view>
6+
</transition>
7+
<app-footer></app-footer>
8+
</div>
109
</template>
1110

1211
<script>
13-
import TopMenu from './shared/TopMenu.vue'
14-
import Notification from './shared/Notification.vue'
15-
import AppFooter from './shared/AppFooter.vue'
16-
import jwtToken from './../helpers/jwt-token';
12+
import TopMenu from './shared/TopMenu.vue';
13+
import AppFooter from './shared/AppFooter.vue';
1714
18-
export default {
19-
created() {
20-
if(jwtToken.getToken()) {
21-
this.$store.dispatch('setAuthUser');
22-
}
23-
},
24-
components: {
25-
'top-menu': TopMenu,
26-
'notification': Notification,
27-
'app-footer': AppFooter
28-
}
29-
}
15+
export default {
16+
components: {
17+
'top-menu': TopMenu,
18+
'app-footer': AppFooter
19+
}
20+
}
3021
</script>
Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
<template>
2-
<div class="container">
3-
<div class="jumbotron">
4-
<h1 v-once>{{siteName}}</h1>
5-
<p>Starter Boilerplate SPA made with Laravel 5.5, JWT Auth, Vue 2, Vue-router 3, Vuex 3, Axios and love</p>
6-
</div>
7-
</div>
2+
<div class="container">
3+
<div class="jumbotron">
4+
<h1 v-once>{{siteName}}</h1>
5+
<p>Starter Boilerplate SPA made with Laravel 5.5, JWT Auth, Vue 2, Vue-router 3, Vuex 3, Axios and love</p>
6+
</div>
7+
</div>
88
</template>
99

1010
<script>
11-
import {siteName} from './../../config';
11+
import {siteName} from './../../config';
1212
13-
export default {
14-
data() {
15-
return {
16-
siteName: siteName
17-
}
18-
}
19-
}
13+
export default {
14+
data() {
15+
return {
16+
siteName: siteName
17+
}
18+
}
19+
}
2020
</script>
Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,42 @@
11
<template>
2-
<div class="container">
3-
<div class="row">
4-
<div class="col-md-8">
5-
<div class="page-header">
6-
<h1>Login</h1>
7-
</div>
8-
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aspernatur corporis deserunt, dolorem eligendi esse eum illo illum inventore libero minus nam numquam officiis praesentium quas quasi repudiandae sed tempore voluptatibus?</p>
9-
</div>
10-
<div class="col-md-4">
11-
<div class="panel panel-default">
12-
<div class="panel-heading">Login</div>
13-
<div class="panel-body">
14-
<login-form></login-form>
15-
</div>
16-
</div>
17-
</div>
18-
</div>
19-
</div>
2+
<div class="container">
3+
<div class="row">
4+
<div class="col-md-8">
5+
<div class="page-header">
6+
<h1>Login</h1>
7+
</div>
8+
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aspernatur corporis deserunt, dolorem eligendi esse eum illo illum inventore libero minus nam numquam officiis praesentium quas quasi repudiandae sed tempore voluptatibus?</p>
9+
</div>
10+
<div class="col-md-4">
11+
<div class="panel panel-default">
12+
<div class="panel-heading">Login</div>
13+
<div class="panel-body">
14+
<login-form @loginSuccess="loginSuccess"></login-form>
15+
</div>
16+
</div>
17+
</div>
18+
</div>
19+
</div>
2020
</template>
2121

2222
<script>
23-
import LoginForm from './../login/LoginForm.vue'
23+
import LoginForm from './../login/LoginForm.vue'
24+
import jwtToken from "../../helpers/jwt-token";
25+
import {mapActions} from "vuex";
2426
25-
export default {
26-
components: {
27-
'login-form': LoginForm
28-
}
29-
}
27+
export default {
28+
components: {
29+
'login-form': LoginForm
30+
},
31+
methods: {
32+
...mapActions([
33+
'setAuthUser'
34+
]),
35+
loginSuccess(data) {
36+
jwtToken.setToken(data.token);
37+
this.setAuthUser(data.user);
38+
this.$router.push({name: 'profile'});
39+
}
40+
}
41+
}
3042
</script>

0 commit comments

Comments
 (0)