首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Vuejs3和InertiaJs访问Laravel 9中的会话数据

使用Vuejs3和InertiaJs访问Laravel 9中的会话数据
EN

Stack Overflow用户
提问于 2022-09-05 08:35:07
回答 1查看 194关注 0票数 0

我正在用Vuejs做我的第一个Laravel项目。我的应用程序的一个功能是允许超级管理员以用户身份登录(模拟)。单击Impersonate Button时,impersonate将添加到会话中,以便在视图中访问它。这在我的其他Laravel/Blade项目中是可行的。

Pages/Users/Index.vue

代码语言:javascript
复制
...
<Link @click="impersonate(user.id)">Impersonate</Link>
... 
<script>
...
methods: {
    impersonate(id) {
        this.$inertia.post(route("user.impersonate", id));
    },
},
...
</script>

UserController.php

代码语言:javascript
复制
...
public function impersonate(User $user)
{
    /*if(! is_null(auth()->user()->account_id)) {
        return;
    }*/

    $originalId = auth()->user()->id;
    session()->put('impersonate', $originalId);
    auth()->loginUsingId($user->id);

    return redirect('/users');
}
...

模拟可以工作,我可以作为其他用户成功地登录,但我不知道如何访问Vue内部的会话数据,因此我可以用注销链接显示一个块--使用Blade,我只需编写:

代码语言:javascript
复制
@if(session()->has('impersonate'))
    ...
        <div>
            You are impersonating {{auth()->user()->name}}
        </div>
        <div>
            <a href="{{route('leave-impersonation')}}">
                Leave Impersonation
            </a>
        </div>
    ...
@endif

如何用Vue编写if部件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-05 15:12:48

要在组件中访问该变量,您以前必须在HandleInertiaRequests中间件中共享它。

例如,在模板中记录用户的电子邮件:

代码语言:javascript
复制
<template>
  {{ $page.props.auth.user.email }}
</template>

如果您想在脚本端访问这个支柱,就必须使用usePage

在脚本部分获得用户电子邮件记录的示例(使用Vue3 composition API制作的示例,但您可以根据您的需要来使用它):

代码语言:javascript
复制
<script setup>
  import { usePage } from '@inertiajs/inertia-vue3'

  const userEmail = usePage().props.value.auth.user.email
</script>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73606634

复制
相关文章

相似问题

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