1. Introduction
Hello everyone, I have time to come back to continue with Vuejs Spa + Laravel authentiaction jwt series. Let’s start too.
2. Back end (Laravel)
Step 1
- Create a Laravel
composer create-project --prefer-dist laravel/laravel learning
projectcomposer create-project --prefer-dist laravel/laravel learning
run comand line :
- composer install
- php artisan key: generate
- cp .env.example .env
- composer require laravel / ui (package laravel ui)
- After running php Artisan after running, you can see a component folder in resoures / js
- npm install or yarn install to describe packages.
Install the JWT package
- composer requires tymon / jwt-auth
- Next open config / app.php: add provider: Tymon JWTAuth Providers LaravelServiceProvider :: class, add aliases
1 2 3 | <span class="token single-quoted-string string">'JWTAuth'</span> <span class="token operator">=</span> <span class="token operator">></span> Tymon <span class="token package">JWTAuth Facades JWTAuth</span> <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token keyword">class</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'JWTFactory'</span> <span class="token operator">=</span> <span class="token operator">></span> Tymon <span class="token package">JWTAuth Facades JWTFactory</span> <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token keyword">class</span> <span class="token punctuation">,</span> |
then we publish it: php artisan vendor:publish --provider="TymonJWTAuthProvidersLaravelServiceProvider"
Step 2
First create 1 controller:
php artisan make:controller api/SinglePageController
The purpose of this Controller is to return the view using vueJs.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">namespace</span> <span class="token package">App Http Controllers api</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">App Http Controllers Controller</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate Http Request</span> <span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">SinglePageController</span> <span class="token keyword">extends</span> <span class="token class-name">Controller</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">index</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">view</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'app'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span> |
Step 3
A token generated when we login will return the User model. The User model will implement JWTSubject and update the model again:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | <span class="token keyword">namespace</span> <span class="token package">App Models</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate Notifications Notifiable</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate Contracts Auth MustVerifyEmail</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate Foundation Auth User</span> <span class="token keyword">as</span> Authenticatable <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Tymon JWTAuth Contracts JWTSubject</span> <span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">User</span> <span class="token keyword">extends</span> <span class="token class-name">Authenticatable</span> <span class="token keyword">implements</span> <span class="token class-name">JWTSubject</span> <span class="token punctuation">{</span> <span class="token keyword">use</span> <span class="token package">Notifiable</span> <span class="token punctuation">;</span> <span class="token comment">/** * The attributes that are mass assignable. * * @var array */</span> <span class="token keyword">protected</span> <span class="token variable">$fillable</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'name'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'email'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'password'</span> <span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token comment">/** * The attributes that should be hidden for arrays. * * @var array */</span> <span class="token keyword">protected</span> <span class="token variable">$hidden</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'password'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'remember_token'</span> <span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">getJWTIdentifier</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">getKey</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">getJWTCustomClaims</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Step 4 Update Authentication Middleware
Update them to middeware Autenticate.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">namespace</span> <span class="token package">App Http Middleware</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate Auth Middleware Authenticate</span> <span class="token keyword">as</span> Middleware <span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">Authenticate</span> <span class="token keyword">extends</span> <span class="token class-name">Middleware</span> <span class="token punctuation">{</span> <span class="token comment">// Override handle method</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">handle</span> <span class="token punctuation">(</span> <span class="token variable">$request</span> <span class="token punctuation">,</span> Closure <span class="token variable">$next</span> <span class="token punctuation">,</span> <span class="token punctuation">.</span> <span class="token punctuation">.</span> <span class="token punctuation">.</span> <span class="token variable">$guards</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">authenticate</span> <span class="token punctuation">(</span> <span class="token variable">$request</span> <span class="token punctuation">,</span> <span class="token variable">$guards</span> <span class="token punctuation">)</span> <span class="token operator">===</span> <span class="token single-quoted-string string">'authentication_failed'</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">response</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">json</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'error'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'Unauthorized'</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token number">400</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token variable">$next</span> <span class="token punctuation">(</span> <span class="token variable">$request</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// Override authentication method</span> <span class="token keyword">protected</span> <span class="token keyword">function</span> <span class="token function">authenticate</span> <span class="token punctuation">(</span> <span class="token variable">$request</span> <span class="token punctuation">,</span> <span class="token keyword">array</span> <span class="token variable">$guards</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token keyword">empty</span> <span class="token punctuation">(</span> <span class="token variable">$guards</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$guards</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token constant">null</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span> <span class="token variable">$guards</span> <span class="token keyword">as</span> <span class="token variable">$guard</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">auth</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">guard</span> <span class="token punctuation">(</span> <span class="token variable">$guard</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">check</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">auth</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">shouldUse</span> <span class="token punctuation">(</span> <span class="token variable">$guard</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token single-quoted-string string">'authentication_failed'</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span> |
Step 5
Next we create a controller to serve the view, create, update php artisan make:controller api/UserController
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">namespace</span> <span class="token package">App Http Controllers api</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">App Http Controllers Controller</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate Http Request</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">App Http Models User</span> <span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">UserController</span> <span class="token keyword">extends</span> <span class="token class-name">Controller</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">__construct</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">middleware</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'auth:api'</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'except'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'login'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'register'</span> <span class="token punctuation">]</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">index</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">response</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">json</span> <span class="token punctuation">(</span> <span class="token function">auth</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'api'</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">user</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">login</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$credentials</span> <span class="token operator">=</span> <span class="token function">request</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'email'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'password'</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token operator">!</span> <span class="token variable">$token</span> <span class="token operator">=</span> <span class="token function">auth</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'api'</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">attempt</span> <span class="token punctuation">(</span> <span class="token variable">$credentials</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">response</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">json</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'error'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'Unauthorized'</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token number">401</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">respondWithToken</span> <span class="token punctuation">(</span> <span class="token variable">$token</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">logout</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">auth</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'api'</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">logout</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token function">response</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">json</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'message'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'Successfully logged out'</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">register</span> <span class="token punctuation">(</span> Request <span class="token variable">$request</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">validate</span> <span class="token punctuation">(</span> <span class="token variable">$request</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'name'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'required'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'email'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'required|email|unique:users'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'password'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'required|min:6'</span> <span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$user</span> <span class="token operator">=</span> User <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">create</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'name'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token variable">$request</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">name</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'email'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token variable">$request</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">email</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'password'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token variable">$request</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">password</span> <span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token function">response</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">json</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'user'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token variable">$user</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> Response <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token constant">HTTP_OK</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">refresh</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">respondWithToken</span> <span class="token punctuation">(</span> <span class="token function">auth</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'api'</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">refresh</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">protected</span> <span class="token keyword">function</span> <span class="token function">respondWithToken</span> <span class="token punctuation">(</span> <span class="token variable">$token</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">response</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">json</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'access_token'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token variable">$token</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'user'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">guard</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'token_type'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'bearer'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'expires_in'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token function">auth</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'api'</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">factory</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">getTTL</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">60</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">guard</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> Auth <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">Guard</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'api'</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">user</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span> |
Step 6 – Blade
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <span class="token doctype"><!doctype html></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> html</span> <span class="token attr-name">lang</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> {{ str_replace('_', '-', app()->getLocale()) }} <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> head</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> meta</span> <span class="token attr-name">charset</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> utf-8 <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> meta</span> <span class="token attr-name">name</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> viewport <span class="token punctuation">"</span></span> <span class="token attr-name">content</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> width=device-width, initial-scale=1 <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> meta</span> <span class="token attr-name">name</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> csrf-token <span class="token punctuation">"</span></span> <span class="token attr-name">content</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> {{ csrf_token() }} <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> title</span> <span class="token punctuation">></span></span> Laravel <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> title</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> link</span> <span class="token attr-name">href</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons <span class="token punctuation">"</span></span> <span class="token attr-name">rel</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> stylesheet <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> link</span> <span class="token attr-name">href</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> https://cdn.jsdelivr.net/npm/vuetify/dist/vuetify.min.css <span class="token punctuation">"</span></span> <span class="token attr-name">rel</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> stylesheet <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> link</span> <span class="token attr-name">href</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> {{ asset('css/app.css') }} <span class="token punctuation">"</span></span> <span class="token attr-name">rel</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> stylesheet <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> link</span> <span class="token attr-name">href</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> {{ asset('css/custom.css') }} <span class="token punctuation">"</span></span> <span class="token attr-name">rel</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> stylesheet <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> head</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> body</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> div</span> <span class="token attr-name">id</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> app <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> div</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> script</span> <span class="token attr-name">src</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> {{ asset('js/app.js') }} <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> script</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> body</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> html</span> <span class="token punctuation">></span></span> |
Throw this in resources / views / welcome.blade.php
3 Client (VueJs)
Step 1
Clien, we use 2 packages, vue-router and websanova / vue-auth
1 2 3 4 | npm install @websanova/vue-auth npm install vue-router |
Webpack Mix Mix js file and style into public folder, I also want to use the path to access Vue components more easily so I will use alias
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <span class="token keyword">const</span> mix <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">'laravel-mix'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> mix <span class="token punctuation">.</span> <span class="token function">webpackConfig</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> resolve <span class="token operator">:</span> <span class="token punctuation">{</span> extensions <span class="token operator">:</span> <span class="token punctuation">[</span> <span class="token string">'.js'</span> <span class="token punctuation">,</span> <span class="token string">'.vue'</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> alias <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">'@'</span> <span class="token operator">:</span> __dirname <span class="token operator">+</span> <span class="token string">'/resources/js'</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token comment">/* |-------------------------------------------------------------------------- | Mix Asset Management |-------------------------------------------------------------------------- | | Mix provides a clean, fluent API for defining some Webpack build steps | for your Laravel application. By default, we are compiling the Sass | file for the application as well as bundling up all the JS files. | */</span> mix <span class="token punctuation">.</span> <span class="token function">js</span> <span class="token punctuation">(</span> <span class="token string">'resources/js/app.js'</span> <span class="token punctuation">,</span> <span class="token string">'public/js'</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">sass</span> <span class="token punctuation">(</span> <span class="token string">'resources/sass/app.scss'</span> <span class="token punctuation">,</span> <span class="token string">'public/css'</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">sass</span> <span class="token punctuation">(</span> <span class="token string">'resources/sass/custom.scss'</span> <span class="token punctuation">,</span> <span class="token string">'public/css'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Now access the vue components in resoure / js directory, just replace with @ /
Step 2 – Router
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <span class="token keyword">import</span> VueRouter <span class="token keyword">from</span> <span class="token string">'vue-router'</span> <span class="token punctuation">;</span> <span class="token keyword">import</span> Login <span class="token keyword">from</span> <span class="token string">'@/components/auth/LoginComponent'</span> <span class="token punctuation">;</span> <span class="token keyword">import</span> Register <span class="token keyword">from</span> <span class="token string">'@/components/auth/RegisterComponent'</span> <span class="token punctuation">;</span> <span class="token keyword">import</span> Dashboard <span class="token keyword">from</span> <span class="token string">'@/components/DashboadComponent'</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> routes <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token comment">// path for determined page</span> <span class="token punctuation">{</span> path <span class="token operator">:</span> <span class="token string">'/register'</span> <span class="token punctuation">,</span> component <span class="token operator">:</span> Register <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> path <span class="token operator">:</span> <span class="token string">'/login'</span> <span class="token punctuation">,</span> component <span class="token operator">:</span> Login <span class="token punctuation">,</span> name <span class="token operator">:</span> <span class="token string">'login'</span> <span class="token punctuation">,</span> meta <span class="token operator">:</span> <span class="token punctuation">{</span> auth <span class="token operator">:</span> <span class="token boolean">false</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> path <span class="token operator">:</span> <span class="token string">'/home'</span> <span class="token punctuation">,</span> component <span class="token operator">:</span> Dashboard <span class="token punctuation">,</span> name <span class="token operator">:</span> <span class="token string">'home'</span> <span class="token punctuation">,</span> meta <span class="token operator">:</span> <span class="token punctuation">{</span> auth <span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> router <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">VueRouter</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> mode <span class="token operator">:</span> <span class="token string">'history'</span> <span class="token punctuation">,</span> routes <span class="token operator">:</span> routes <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">export</span> <span class="token keyword">default</span> router <span class="token punctuation">;</span> |
Step 3 – Config vue-auth
Create a user.js file in resources
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | <span class="token keyword">import</span> bearer <span class="token keyword">from</span> <span class="token string">'@websanova/vue-auth/drivers/auth/bearer'</span> <span class="token punctuation">;</span> <span class="token keyword">import</span> axios <span class="token keyword">from</span> <span class="token string">'@websanova/vue-auth/drivers/http/axios.1.x'</span> <span class="token punctuation">;</span> <span class="token keyword">import</span> router <span class="token keyword">from</span> <span class="token string">'@websanova/vue-auth/drivers/router/vue-router.2.x'</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> config <span class="token operator">=</span> <span class="token punctuation">{</span> auth <span class="token operator">:</span> bearer <span class="token punctuation">,</span> http <span class="token operator">:</span> axios <span class="token punctuation">,</span> router <span class="token operator">:</span> router <span class="token punctuation">,</span> tokenDefaultName <span class="token operator">:</span> <span class="token string">'auth-token'</span> <span class="token punctuation">,</span> tokenStore <span class="token operator">:</span> <span class="token punctuation">[</span> <span class="token string">'cookie'</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> notFoundRedirect <span class="token operator">:</span> <span class="token punctuation">{</span> path <span class="token operator">:</span> <span class="token string">'/home'</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> registerData <span class="token operator">:</span> <span class="token punctuation">{</span> url <span class="token operator">:</span> <span class="token string">'/api/auth/register'</span> <span class="token punctuation">,</span> method <span class="token operator">:</span> <span class="token string">'POST'</span> <span class="token punctuation">,</span> redirect <span class="token operator">:</span> <span class="token keyword">null</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> loginData <span class="token operator">:</span> <span class="token punctuation">{</span> url <span class="token operator">:</span> <span class="token string">'/api/auth/login'</span> <span class="token punctuation">,</span> method <span class="token operator">:</span> <span class="token string">'POST'</span> <span class="token punctuation">,</span> redirect <span class="token operator">:</span> <span class="token string">'/home'</span> <span class="token punctuation">,</span> fetchUser <span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> logoutData <span class="token operator">:</span> <span class="token punctuation">{</span> url <span class="token operator">:</span> <span class="token string">'/api/auth/logout'</span> <span class="token punctuation">,</span> method <span class="token operator">:</span> <span class="token string">'POST'</span> <span class="token punctuation">,</span> redirect <span class="token operator">:</span> <span class="token string">'/login'</span> <span class="token punctuation">,</span> makeRequest <span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> fetchData <span class="token operator">:</span> <span class="token punctuation">{</span> url <span class="token operator">:</span> <span class="token string">'/api/auth/user'</span> <span class="token punctuation">,</span> method <span class="token operator">:</span> <span class="token string">'GET'</span> <span class="token punctuation">,</span> enabled <span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token function">parseUserData</span> <span class="token punctuation">(</span> <span class="token parameter">data</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> data <span class="token operator">||</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token keyword">export</span> <span class="token keyword">default</span> config <span class="token punctuation">;</span> |
Step 4 – App
app.js here it will be a file used for all components
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <span class="token keyword">import</span> <span class="token string">'./bootstrap'</span> <span class="token punctuation">;</span> <span class="token keyword">import</span> Vue <span class="token keyword">from</span> <span class="token string">'vue'</span> <span class="token punctuation">;</span> <span class="token keyword">import</span> router <span class="token keyword">from</span> <span class="token string">'./route'</span> <span class="token punctuation">;</span> <span class="token keyword">import</span> App <span class="token keyword">from</span> <span class="token string">'@/components/AppComponent'</span> <span class="token keyword">import</span> VueAuth <span class="token keyword">from</span> <span class="token string">'@websanova/vue-auth'</span> <span class="token punctuation">;</span> <span class="token keyword">import</span> axios <span class="token keyword">from</span> <span class="token string">'axios'</span> <span class="token punctuation">;</span> <span class="token keyword">import</span> VueAxios <span class="token keyword">from</span> <span class="token string">'vue-axios'</span> <span class="token punctuation">;</span> <span class="token keyword">import</span> auth <span class="token keyword">from</span> <span class="token string">'./auth'</span> <span class="token punctuation">;</span> <span class="token keyword">import</span> VueRouter <span class="token keyword">from</span> <span class="token string">'vue-router'</span> <span class="token punctuation">;</span> Vue <span class="token punctuation">.</span> <span class="token function">use</span> <span class="token punctuation">(</span> VueAxios <span class="token punctuation">,</span> axios <span class="token punctuation">)</span> <span class="token punctuation">;</span> Vue <span class="token punctuation">.</span> router <span class="token operator">=</span> router <span class="token punctuation">;</span> App <span class="token punctuation">.</span> router <span class="token operator">=</span> Vue <span class="token punctuation">.</span> router <span class="token punctuation">;</span> Vue <span class="token punctuation">.</span> <span class="token function">use</span> <span class="token punctuation">(</span> VueRouter <span class="token punctuation">)</span> <span class="token punctuation">;</span> Vue <span class="token punctuation">.</span> <span class="token function">use</span> <span class="token punctuation">(</span> VueAuth <span class="token punctuation">,</span> auth <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">new</span> <span class="token class-name">Vue</span> <span class="token punctuation">(</span> App <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">$mount</span> <span class="token punctuation">(</span> <span class="token string">'#app'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Step 5
Create 1 AppComponent.vue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <span class="token operator"><</span> template <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"panel panel-default"</span> <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"panel-heading"</span> v <span class="token operator">-</span> <span class="token keyword">if</span> <span class="token operator">=</span> <span class="token string">"$auth.check()"</span> <span class="token operator">></span> <span class="token operator"><</span> top <span class="token operator">-</span> menu <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> top <span class="token operator">-</span> menu <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"panel-body"</span> <span class="token operator">></span> <span class="token operator"><</span> router <span class="token operator">-</span> view <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> router <span class="token operator">-</span> view <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> template <span class="token operator">></span> <span class="token operator"><</span> script <span class="token operator">></span> <span class="token keyword">import</span> TopMenu <span class="token keyword">from</span> <span class="token string">'@/components/layouts/TopMenuComponent'</span> <span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> components <span class="token operator">:</span> <span class="token punctuation">{</span> TopMenu <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> script <span class="token operator">></span> |
Step 6
Need to add a TopBar component to see who is currently logged in and performing the logout. This component is only available when the system has been authenticated using the v-if = “$ auth.check ()” function.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <span class="token operator"><</span> template <span class="token operator">></span> <span class="token operator"><</span> nav <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"navbar navbar-dark bg-dark"</span> <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"logo"</span> <span class="token operator">></span> <span class="token operator"><</span> router <span class="token operator">-</span> link <span class="token operator">:</span> to <span class="token operator">=</span> <span class="token string">"{}"</span> <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"navbar-brand"</span> <span class="token operator">></span> Learning Laravel <span class="token operator">-</span> VueJs <span class="token operator"><</span> <span class="token operator">/</span> router <span class="token operator">-</span> link <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"my-2 my-lg-0 dropdown navbar-right"</span> <span class="token operator">></span> <span class="token operator"><</span> a <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"nav-link dropdown-toggle"</span> href <span class="token operator">=</span> <span class="token string">"#"</span> id <span class="token operator">=</span> <span class="token string">"navbarDropdown"</span> role <span class="token operator">=</span> <span class="token string">"button"</span> data <span class="token operator">-</span> toggle <span class="token operator">=</span> <span class="token string">"dropdown"</span> aria <span class="token operator">-</span> haspopup <span class="token operator">=</span> <span class="token string">"true"</span> aria <span class="token operator">-</span> expanded <span class="token operator">=</span> <span class="token string">"false"</span> <span class="token operator">></span> <span class="token punctuation">{</span> <span class="token punctuation">{</span> $auth <span class="token punctuation">.</span> <span class="token function">user</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> name <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> a <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"dropdown-menu"</span> aria <span class="token operator">-</span> labelledby <span class="token operator">=</span> <span class="token string">"navbarDropdownMenuLink"</span> <span class="token operator">></span> <span class="token operator"><</span> a <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"dropdown-item text-black"</span> href <span class="token operator">=</span> <span class="token string">"#"</span> @click <span class="token operator">=</span> <span class="token string">"logout"</span> <span class="token operator">></span> Logout <span class="token operator"><</span> <span class="token operator">/</span> a <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> nav <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> template <span class="token operator">></span> |
Step 7
Create a new 1 RegisterComponent.vue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | <span class="token operator"><</span> template <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"container"</span> <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"card card-default"</span> <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"card-header"</span> <span class="token operator">></span> Register <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"card-body"</span> <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"alert alert-danger"</span> v <span class="token operator">-</span> <span class="token keyword">if</span> <span class="token operator">=</span> <span class="token string">"error && !success"</span> <span class="token operator">></span> <span class="token operator"><</span> p <span class="token operator">></span> here was an error <span class="token punctuation">,</span> unable to complete registration <span class="token punctuation">.</span> <span class="token operator"><</span> <span class="token operator">/</span> p <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"alert alert-success"</span> v <span class="token operator">-</span> <span class="token keyword">if</span> <span class="token operator">=</span> <span class="token string">"success"</span> <span class="token operator">></span> <span class="token operator"><</span> p <span class="token operator">></span> Registration completed <span class="token punctuation">.</span> You can now <span class="token operator"><</span> router <span class="token operator">-</span> link <span class="token operator">:</span> to <span class="token operator">=</span> <span class="token string">"{name:'login'}"</span> <span class="token operator">></span> sign <span class="token keyword">in</span> <span class="token punctuation">.</span> <span class="token operator"><</span> <span class="token operator">/</span> router <span class="token operator">-</span> link <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> p <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> form autocomplete <span class="token operator">=</span> <span class="token string">"off"</span> @submit <span class="token punctuation">.</span> prevent <span class="token operator">=</span> <span class="token string">"register"</span> v <span class="token operator">-</span> <span class="token keyword">if</span> <span class="token operator">=</span> <span class="token string">"!success"</span> method <span class="token operator">=</span> <span class="token string">"post"</span> <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"form-group"</span> v <span class="token operator">-</span> bind <span class="token operator">:</span> <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"{ 'has-error': error && errors.email }"</span> <span class="token operator">></span> <span class="token operator"><</span> label <span class="token keyword">for</span> <span class="token operator">=</span> <span class="token string">"name"</span> <span class="token operator">></span> Name <span class="token operator"><</span> <span class="token operator">/</span> label <span class="token operator">></span> <span class="token operator"><</span> input type <span class="token operator">=</span> <span class="token string">"text"</span> id <span class="token operator">=</span> <span class="token string">"name"</span> <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"form-control"</span> v <span class="token operator">-</span> model <span class="token operator">=</span> <span class="token string">"name"</span> <span class="token operator">></span> <span class="token operator"><</span> span <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"help-block"</span> v <span class="token operator">-</span> <span class="token keyword">if</span> <span class="token operator">=</span> <span class="token string">"error && errors.name"</span> <span class="token operator">></span> <span class="token punctuation">{</span> <span class="token punctuation">{</span> errors <span class="token punctuation">.</span> name <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> span <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"form-group"</span> v <span class="token operator">-</span> bind <span class="token operator">:</span> <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"{ 'has-error': error && errors.email }"</span> <span class="token operator">></span> <span class="token operator"><</span> label <span class="token keyword">for</span> <span class="token operator">=</span> <span class="token string">"email"</span> <span class="token operator">></span> Email <span class="token operator"><</span> <span class="token operator">/</span> label <span class="token operator">></span> <span class="token operator"><</span> input type <span class="token operator">=</span> <span class="token string">"email"</span> id <span class="token operator">=</span> <span class="token string">"email"</span> <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"form-control"</span> placeholder <span class="token operator">=</span> <span class="token string">" <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> "</span> v <span class="token operator">-</span> model <span class="token operator">=</span> <span class="token string">"email"</span> <span class="token operator">></span> <span class="token operator"><</span> span <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"help-block"</span> v <span class="token operator">-</span> <span class="token keyword">if</span> <span class="token operator">=</span> <span class="token string">"error && errors.email"</span> <span class="token operator">></span> <span class="token punctuation">{</span> <span class="token punctuation">{</span> errors <span class="token punctuation">.</span> email <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> span <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"form-group"</span> v <span class="token operator">-</span> bind <span class="token operator">:</span> <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"{ 'has-error': error && errors.password }"</span> <span class="token operator">></span> <span class="token operator"><</span> label <span class="token keyword">for</span> <span class="token operator">=</span> <span class="token string">"password"</span> <span class="token operator">></span> Password <span class="token operator"><</span> <span class="token operator">/</span> label <span class="token operator">></span> <span class="token operator"><</span> input type <span class="token operator">=</span> <span class="token string">"password"</span> id <span class="token operator">=</span> <span class="token string">"password"</span> <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"form-control"</span> v <span class="token operator">-</span> model <span class="token operator">=</span> <span class="token string">"password"</span> <span class="token operator">></span> <span class="token operator"><</span> span <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"help-block"</span> v <span class="token operator">-</span> <span class="token keyword">if</span> <span class="token operator">=</span> <span class="token string">"error && errors.password"</span> <span class="token operator">></span> <span class="token punctuation">{</span> <span class="token punctuation">{</span> errors <span class="token punctuation">.</span> password <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> span <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> button type <span class="token operator">=</span> <span class="token string">"submit"</span> <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"btn btn-default"</span> <span class="token operator">></span> Register <span class="token operator"><</span> <span class="token operator">/</span> button <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> form <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> template <span class="token operator">></span> <span class="token operator"><</span> script <span class="token operator">></span> <span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token function-variable function">data</span> <span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> name <span class="token operator">:</span> <span class="token string">''</span> <span class="token punctuation">,</span> email <span class="token operator">:</span> <span class="token string">''</span> <span class="token punctuation">,</span> password <span class="token operator">:</span> <span class="token string">''</span> <span class="token punctuation">,</span> error <span class="token operator">:</span> <span class="token boolean">false</span> <span class="token punctuation">,</span> errors <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> success <span class="token operator">:</span> <span class="token boolean">false</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> methods <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token function-variable function">register</span> <span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> app <span class="token operator">=</span> <span class="token keyword">this</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> $auth <span class="token punctuation">.</span> <span class="token function">register</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> url <span class="token operator">:</span> <span class="token string">'/api/auth/register'</span> <span class="token punctuation">,</span> params <span class="token operator">:</span> <span class="token punctuation">{</span> name <span class="token operator">:</span> app <span class="token punctuation">.</span> name <span class="token punctuation">,</span> email <span class="token operator">:</span> app <span class="token punctuation">.</span> email <span class="token punctuation">,</span> password <span class="token operator">:</span> app <span class="token punctuation">.</span> password <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token function-variable function">success</span> <span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> app <span class="token punctuation">.</span> success <span class="token operator">=</span> <span class="token boolean">true</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token function-variable function">error</span> <span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">resp</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> app <span class="token punctuation">.</span> error <span class="token operator">=</span> <span class="token boolean">true</span> <span class="token punctuation">;</span> app <span class="token punctuation">.</span> errors <span class="token operator">=</span> resp <span class="token punctuation">.</span> response <span class="token punctuation">.</span> data <span class="token punctuation">.</span> errors <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> redirect <span class="token operator">:</span> <span class="token keyword">null</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> script <span class="token operator">></span> |
Step 8
Next is LoginComponent.vue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | <span class="token operator"><</span> template <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"container"</span> <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"card card-default"</span> <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"card-header"</span> <span class="token operator">></span> Sign In <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"card-body"</span> <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"alert alert-danger"</span> v <span class="token operator">-</span> <span class="token keyword">if</span> <span class="token operator">=</span> <span class="token string">"error"</span> <span class="token operator">></span> <span class="token operator"><</span> p <span class="token operator">></span> Sign <span class="token keyword">in</span> fail <span class="token punctuation">.</span> Please <span class="token keyword">try</span> again <span class="token operator">!</span> <span class="token operator"><</span> <span class="token operator">/</span> p <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> form autocomplete <span class="token operator">=</span> <span class="token string">"off"</span> @submit <span class="token punctuation">.</span> prevent <span class="token operator">=</span> <span class="token string">"login"</span> method <span class="token operator">=</span> <span class="token string">"post"</span> <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"form-group"</span> <span class="token operator">></span> <span class="token operator"><</span> label <span class="token keyword">for</span> <span class="token operator">=</span> <span class="token string">"email"</span> <span class="token operator">></span> <span class="token constant">E</span> <span class="token operator">-</span> mail <span class="token operator"><</span> <span class="token operator">/</span> label <span class="token operator">></span> <span class="token operator"><</span> input type <span class="token operator">=</span> <span class="token string">"email"</span> id <span class="token operator">=</span> <span class="token string">"email"</span> <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"form-control"</span> placeholder <span class="token operator">=</span> <span class="token string">" <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> "</span> v <span class="token operator">-</span> model <span class="token operator">=</span> <span class="token string">"email"</span> required <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"form-group"</span> <span class="token operator">></span> <span class="token operator"><</span> label <span class="token keyword">for</span> <span class="token operator">=</span> <span class="token string">"password"</span> <span class="token operator">></span> Password <span class="token operator"><</span> <span class="token operator">/</span> label <span class="token operator">></span> <span class="token operator"><</span> input type <span class="token operator">=</span> <span class="token string">"password"</span> id <span class="token operator">=</span> <span class="token string">"password"</span> <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"form-control"</span> v <span class="token operator">-</span> model <span class="token operator">=</span> <span class="token string">"password"</span> required <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> button type <span class="token operator">=</span> <span class="token string">"submit"</span> <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"btn btn-default"</span> <span class="token operator">></span> Sign In <span class="token operator"><</span> <span class="token operator">/</span> button <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> form <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> template <span class="token operator">></span> <span class="token operator"><</span> script <span class="token operator">></span> <span class="token keyword">import</span> Vue <span class="token keyword">from</span> <span class="token string">'vue'</span> <span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token function-variable function">data</span> <span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> email <span class="token operator">:</span> <span class="token keyword">null</span> <span class="token punctuation">,</span> password <span class="token operator">:</span> <span class="token keyword">null</span> <span class="token punctuation">,</span> error <span class="token operator">:</span> <span class="token boolean">false</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> methods <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token function-variable function">login</span> <span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> app <span class="token operator">=</span> <span class="token keyword">this</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> $auth <span class="token punctuation">.</span> <span class="token function">login</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> params <span class="token operator">:</span> <span class="token punctuation">{</span> email <span class="token operator">:</span> app <span class="token punctuation">.</span> email <span class="token punctuation">,</span> password <span class="token operator">:</span> app <span class="token punctuation">.</span> password <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token function-variable function">success</span> <span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">response</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token function-variable function">error</span> <span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> app <span class="token punctuation">.</span> error <span class="token operator">=</span> <span class="token boolean">true</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> script <span class="token operator">></span> |
Step 9
Finally, HomeComponent. When the login is complete, the website will redirect to this page
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <span class="token operator"><</span> template <span class="token operator">></span> <span class="token operator"><</span> div <span class="token operator">></span> <span class="token operator"><</span> h1 <span class="token operator">></span> Home <span class="token operator"><</span> <span class="token operator">/</span> h1 <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> template <span class="token operator">></span> <span class="token operator"><</span> script <span class="token operator">></span> <span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> methods <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token keyword">async</span> <span class="token function">created</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> token <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">const</span> tokenType <span class="token operator">=</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> token <span class="token punctuation">.</span> token_type <span class="token punctuation">;</span> <span class="token keyword">const</span> accessToken <span class="token operator">=</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> token <span class="token punctuation">.</span> access_token <span class="token punctuation">;</span> <span class="token keyword">let</span> authorization <span class="token operator">=</span> <span class="token string">''</span> <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> tokenType <span class="token operator">&&</span> accessToken <span class="token punctuation">)</span> <span class="token punctuation">{</span> authorization <span class="token operator">=</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> tokenType <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> accessToken <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> axios <span class="token punctuation">.</span> defaults <span class="token punctuation">.</span> headers <span class="token punctuation">.</span> common <span class="token punctuation">[</span> <span class="token string">'Authorization'</span> <span class="token punctuation">]</span> <span class="token operator">=</span> authorization <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> script <span class="token operator">></span> |
4 Finish
Hope the article will bring a lot of things to you. To add motivation or like and subscribe (Upvote for me). Any questions please comment or below. Thank you for read.