-2

I am currently working on a VueJs3 Project. I already coded a login system, which works perfectly fine. I now want to have a div on the homepage, that tells the user with which account they are logged in.

"You are logged in as:" + username

I therefore, have to send the username from the login component to the home component. Can someone help me out here? I have tried out a lot of ways but none of them seem to work.

Btw. the components are all saved in the components folder

Here is my code:

home.vue

    <div class="home">
        <h1>You are logged in as: {{currentusername}}</h1>
        <Maschinen/>

    </div>
</template>

<script>
    import Maschinen from '@/components/Maschinen.vue'
    import axios from 'axios'

    export default {
        name: 'Home',
        components: {
            Maschinen
        },
        data() {
            return {
                currentusername: null,
            }
        },
        async created() {
            const response = await axios.get('http://localhost:8080/user/hetwinuser', {
                headers: {
                    Authorization: 'Bearer ' + localStorage.getItem('token')
                }
            });
            this.currentusername= (response.data.username);
        }
    }
</script>



login.vue:

<template>
    <form @submit.prevent="handleSubmit">
        <h1>Login</h1>
        <!--username + pw input for login-->
        <div class="form-group">
            <label id="username">Username:</label>
            <input id="usernameinput" type="text" class="form-control" v-model="username" placeholder="Username">
        </div>
        <div>
            <label id="password">Password:</label>
            <input id="passwordinput" type="password" class="form-control" v-model="password" placeholder="Password">
        </div>
        <!--enter buttons-->
        <button class="enter">Enter</button>
        <router-link to="/register" id="goToRegister" tag="button">Register</router-link>
    </form>
</template>

<script>
    import axios from 'axios';

    export default {
        name: "Login",
        data: () => {
            return {
                username: '',
                password: ''
            }
        },
        methods: {
            async handleSubmit() {//executed when enter button is pressed
                const data = {
                    username: this.username,
                    password: this.password
                };
                axios.post('http://localhost:8080/authenticate', data) //post the username + pw and will receive the token in exchange
                    .then(
                        res => {
                            localStorage.setItem('token', res.data.jwt);
                            localStorage.setItem('currentusername', this.username);
                            //console.log(localStorage.getItem('token'));
                        }
                    ).catch(
                    err => {
                        console.log(err)
                    }
                );

            }
        },

    }
</script>```
ManManu
  • 29
  • 5

1 Answers1

2

username and password

Define it under store -> state.js. Then where you want it

Use it as "this.$store.state.username"

cooldar
  • 56
  • 3