首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel登录用户最佳实践

Laravel登录用户最佳实践
EN

Stack Overflow用户
提问于 2020-07-22 15:48:33
回答 2查看 3.5K关注 0票数 3

我想知道检查用户是否仍然登录到客户端的最佳实践是什么。

假设一个用户登录。如果它成功了,它将保存在州中,如下所示:

代码语言:javascript
复制
axios.post('/login').then(() => {
  this.state.loggedInUser = true
});

现在,如果用户刷新他们的浏览器,状态就会丢失,但是laravel_sessionXSRF-TOKEN仍然是可用的和有效的。

在每个页面重新加载上添加中间件以请求检索当前登录的用户信息是否有意义?像这样吗?:

代码语言:javascript
复制
const authMiddleware = () => {
  axios.get('/user').catch(() => console.error('user is not logged in!'));
};

编辑

请注意,我正在使用Sanctum的SPA模式。所以这里没有代币。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-25 11:12:52

使用Vue和Vuex作为我的SPA,我设法使用以下设置跟踪通过身份验证的用户:

store.js

store.js跟踪userisLoggedIn状态。

代码语言:javascript
复制
import { isLoggedIn } from "./utils";
export default {
    state: {
        isLoggedIn: false,
        user: {}
    },
    mutations: {
        setUser(state, payload) {
            state.user = payload;
        },
        setLoggedIn(state, payload) {
            state.isLoggedIn = payload;
        }
    },
    actions: {
        async loadUser({ commit, dispatch }) {
            if (isLoggedIn) {
                try {
                    const user = (await axios.get("/user")).data;
                    commit("setUser", user);
                    commit("setLoggedIn", true);
                } catch (error) {
                    console.log(error)
                }
            }
        }
    }
};

utils.js

utils.js包含用于从本地存储设置和登录状态的帮助程序。

代码语言:javascript
复制
export function isLoggedIn() {
    return localStorage.getItem("isLoggedIn") == "true";
}

export function logIn() {
    localStorage.setItem("isLoggedIn", true);
}

Login.vue

在login.vue中,我从utils.js调用logIn()来设置LocalStorage中的isLoggedIn值。

此外,loadUser操作被分派用于设置Vuex存储中的用户信息。

代码语言:javascript
复制
<script>
import { logIn } from "../utils";
 methods: {
        async login() {
            try {
                await axios.get("/sanctum/csrf-cookie");
                await axios.post("/login", {
                    email: this.email,
                    password: this.password
                });
                logIn();
                this.$store.dispatch("loadUser");
                this.$router.push('/');
            } catch (error) {
                console.log(error);
            }
        }
    }
</script>

App.js

loadUser操作也被分派到这里,以便在登录时使用户的信息在全球范围内可用。

代码语言:javascript
复制
const app = new Vue({
    ...
    async beforeCreate() {
        this.$store.dispatch("loadUser");
    }
});
票数 6
EN

Stack Overflow用户

发布于 2020-08-25 13:50:05

将其存储在sessionStorage中,并将loggedInUser从sessionStorage初始化为:

代码语言:javascript
复制
sessionStorage.getItem('loggedInUser') === 'true' || false
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63038216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档