How to set cookie in vuejs?
You could use the vue-cookie or vue-cookies npm package.
You can set a cookie in the created method.
created() {
this.$cookie.set("keyName", keyValue, "expiring time")
}
Setting an cookie from an third-party API
Below is a simple example of how u do that
function setCookie(cname, cvalue, exdays) {
const d = new Date();
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
let expires = "expires="+d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
function getCookie(cname) {
let name = cname + "=";
let ca = document.cookie.split(';');
for(let i = 0; i < ca.length; i++) {
let c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
function checkCookie() {
let user = getCookie("username");
if (user != "") {
alert("Welcome again " + user);
} else {
user = prompt("Please enter your name:", "");
if (user != "" && user != null) {
setCookie("username", user, 365);
}
}
}
how to set cookie with httponly flag in vuejs and vuex that cookie cames from server(Laravel)
you should create cookie with httponly flag on server. for example, in nodejs + express you do it with res.cookie("token", token, {httpOnly: true})
.
also notice, with httponly flag you cant read cookie on client.
how to set cookies during vuejs post
I posted this question some time ago, I have managed to work around it by running the vue frontend on the same network as the django backend. Follow this tutorial for instructions: integrating vuejs and django
Once I had the application set up I was able to set the cookies much more cleanly using :
axios.defaults.xsrfCookieName = 'csrftoken'
axios.defaults.xsrfHeaderName = "X-CSRFTOKEN"
Here is my login page for example
<template>
<div class = "container">
<h2>Sign In</h2>
<b-form v-on:submit.prevent="submit()">
<b-form-group id="signin" label="">
<!-- dynamic error message -->
<p class="loginErr" v-if="logErr">Incorrect Username or Password</p>
<b-form-input
id="signin-email"
v-model="username"
placeholder="Email"
required
></b-form-input>
<b-form-input
id="signin-password"
v-model="password"
placeholder="Password"
required
type="password"
></b-form-input>
</b-form-group>
<b-button v-if="!loading" type="submit" variant="primary">Submit</b-button>
<b-spinner v-if="loading"></b-spinner>
</b-form>
</div>
</template>
<script>
import axios from 'axios'
import Vue from 'vue'
export default {
data: ()=>{
return{
loading: false,
logErr: false,
username:'',
password:'',
next: '%2Findy%2Fprofile%2F'
}
},
created: function(){
},
methods: {
submit(){
var vm = this;
vm.loading = true;
var dataStr = 'username='+vm.username+'&password='+vm.password
//set the csrf tokens so django doesn't get fussy when we post
axios.defaults.xsrfCookieName = 'csrftoken'
axios.defaults.xsrfHeaderName = "X-CSRFTOKEN"
axios.post('http://localhost:8000/api/signin/', dataStr)
.then(function (response) {
vm.loading = false;
//determine if indy accepts the login request
var res = response.data
console.log(response.data)
if(!res.login){
vm.logErr = true;
}else{
vm.redirect('home');
}
})
.catch(function (error) {
//currentObj.output = error;
});
},
redirect(path) {
this.$router.push('/' + path);
}
}
}
</script>
<style>
.loginErr{
color: orange;
}
</style>
Vue 3 with vue3-cookies sets same cookies to different locations on variable routes
If I going to route like:
<router-link to=`/user/{user.id}`>
Then issue occurs.
But, If I going to route like:
<router-link :to="{ name: 'user', params: { id: String(user?.id) } }">
That's fine.
Strange behavior.
set-cookie is set in response header but it is not showing in Application->Cookies
After long search I found that you cannot set cookie for cross origin.
I am using Vue and Django Rest Framework.
You can use subdomains and set cookie with samesite 'none', secure and set domain to '.example.com'.
How to get cookie in Vue Router in Vue 3? this undefined in router/index.js
Vue Router 4 removes router.app
, but you could add it yourself when setting up the router:
// main.js
import router from './router'
const app = createApp(App)
app.use(router)
router.app = app
app.mount('#app')
Then in the router config script, you could use that reference to get at app.config.globalProperties.$cookies
(the global added by vue3-cookies
):
// router.js
const router = createRouter({
history: createWebHistory(),
routes
})
function requireAuth(to, from, next) {
const { $cookies } = router.app.config.globalProperties
console.log('_ga', $cookies.get('_ga'))
next()
}
export default router
demo
Related Topics
Jquery Validation Code for Not Allowed Only Blank Space in Textbox
How to Loop Through Json Array and Get Specific Values
How to Delete a Query String Parameter in JavaScript
How to Update a Variable After Button Click
How to Output a Pdf Buffer to Browser Using Nodejs
Hide Menu Sidebar When Clicking Outside the Bar or the Button
Javascript String With New Line - But Not Using \N
Dynamically Increase and Decrease an Input Text Box Size Depending on Another Selector Width
How to Play Audio File into Channel
How to Wait for One Function to Finish Before Continuing
Check If Json Response Data Is Empty
How to Get Full Path of Selected File on Change of <Input Type='File'> Using Javascript, Jquery-Ajax
How to Remove All Null and Empty String Values from an Object
How to Pass Model Data in JavaScript
How to Prevent User to Enter Specific Key Using JavaScript
Getting Null Value in List When Passing by Ajax Call to MVC Controller
Accessing Variables from Other Functions Without Using Global Variables