GithubHelp home page GithubHelp logo

khokon9363 / laravel_nuxt_cli_sanctum_authentication_nuxt-part Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 0.0 158 KB

Laravel Nuxt Cli Sanctum authentication Nuxt Cli part

JavaScript 27.67% Vue 72.33%
laravel nuxt-js laravel-nuxt laravel-nuxt-sunctum laravel-nuxt-sunctum-authentication

laravel_nuxt_cli_sanctum_authentication_nuxt-part's Introduction

Doctor-Seba

Build Setup

# install dependencies
$ npm install

# serve with hot reload at localhost:3000
$ npm run dev

# build for production and launch server
$ npm run build
$ npm run start

# generate static project
$ npm run generate

For detailed explanation on how things work, check out Nuxt.js docs.

Laravel & Nuxt CLI Authentication - Laravel Part

A. Install & setup Sanctum

  1. composer require laravel/sanctum 2 ) php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider" 3 ) php artisan migrate 4 ) EnsureFrontendRequestsAreStateful::class in Karnel.php

B. .env Laravel Domain SESSION_DOMAIN=localhost

**Nuxt Domain**
SANCTUM_STATEFUL_DOMAINS=localhost:3000

C. routes/api.php Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); }); // Login & Logout routes Route::post('/login', 'Auth\LoginController@login'); Route::post('/logout', 'Auth\LoginController@logout');

D. config/cors.php - replace 'paths' => ['api/', 'sanctum/csrf-cookie'], into 'paths' => ['api/'],

E. App/Users.php use HasApiTokens

F. App/Http/Controllers/Auth/LoginController.php public function login(Request $request) { $request->validate([ 'email' => 'required', 'password' => 'required' ]); if (!Auth::attempt($request->only('email', 'password'))) { throw new AuthenticationException(); } return $this->jsonResponse(true, auth()->user(), 200); }

public function logout()
{
    if (auth()->check()) {
        Auth::logout();
        return $this->jsonResponse(true, 'Logged out successfully', 200);
    }
    return $this->jsonResponse(true, 'Something went wrong', 404);
}

private function jsonResponse($success, $data, $status)
{
    return response()->json([
        'success' => $success,
        'data'    => $data,
    ], $status);
}

Nuxt / Vue cli

A. login.vue 1 ) import axios from 'axios' 2 ) axios.defaults.withCredentials = true 3 ) make an helper function - laravelCsrfCookies() every time before any function call this function and return true .

        methods: {
            laravelCsrfCoockie() {
                axios.get(this.baseURL + 'sanctum/csrf-cookie').then((response) => {
                    return true
                })
            },
            login() {
            this.laravelCsrfCoockie()
                axios
                    .post(this.baseURL + 'api/login', {
                    email: this.email,
                    password: this.password,
                    })
                    .then((res) => {
                    localStorage.setItem('me', JSON.stringify(res.data))
                    this.loggedIn = localStorage.getItem('me')
                    this.userName = JSON.parse(localStorage.getItem('me')).data.name
                    console.log(this.loggedIn)
                    })
                    .catch((err) => {
                    console.log(err)
                    })
            },
            logout() {
            this.laravelCsrfCoockie()
            axios
                .post(this.baseURL + 'api/logout')
                .then((res) => {
                localStorage.removeItem('me')
                this.loggedIn = null
                this.userName = 'Guest User'
                console.log(this.loggedIn)
                })
                .catch((err) => {
                console.log(err)
                })
            },

B. Demo Login.vue

<button v-if="!loggedIn" @click="login">Login <button v-else @click="logout">logout

{{ userName }}

<script> import axios from 'axios' axios.defaults.withCredentials = true

export default {
data() {
    return {
    email: '[email protected]',
    password: 'password',
    baseURL: 'http://localhost:8000/',
    loggedIn: localStorage.getItem('me'),
    userName: localStorage.getItem('me')
        ? JSON.parse(localStorage.getItem('me')).data.name
        : 'Guest User',
    }
},
mounted() {
    console.log(this.loggedIn)
},
methods: {
    laravelCsrfCoockie() {
    axios.get(this.baseURL + 'sanctum/csrf-cookie').then((response) => {
        return true
    })
    },
    login() {
    this.laravelCsrfCoockie()
    axios
        .post(this.baseURL + 'api/login', {
        email: this.email,
        password: this.password,
        })
        .then((res) => {
        localStorage.setItem('me', JSON.stringify(res.data))
        this.loggedIn = localStorage.getItem('me')
        this.userName = JSON.parse(localStorage.getItem('me')).data.name
        console.log(this.loggedIn)
        })
        .catch((err) => {
        console.log(err)
        })
    },
    logout() {
    this.laravelCsrfCoockie()
    axios
        .post(this.baseURL + 'api/logout')
        .then((res) => {
        localStorage.removeItem('me')
        this.loggedIn = null
        this.userName = 'Guest User'
        console.log(this.loggedIn)
        })
        .catch((err) => {
        console.log(err)
        })
    },
},
}
</script>

You can use this starter project for to remove the hasslement of Laravel & Sanctum/Vue Cli

laravel_nuxt_cli_sanctum_authentication_nuxt-part's People

Contributors

khokon9363 avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.