【问题标题】:Good practices to manage user session data with vue and laravel API使用 vue 和 laravel API 管理用户会话数据的良好实践
【发布时间】:2020-04-17 14:53:51
【问题描述】:

我正在构建一个single-page application,使用Vuelaravel API 作为后端。 我尝试了一些packages,例如Vue Session,效果很好,但是在几乎每个API 调用中,我总是需要发送2 或3 个始终相同的参数(存储在vue-session),比如@ 987654329@ 和company_id。我曾经在我的其他应用程序中使用常见的PHP sessionsZend_SessionZend Framework)来管理这个,这样我总是将这些信息存储在我的backendsession 中,并且不需要每次都发送它由frontend

这是我过去如何使用PHP session 的示例

$model->insert(array(
    'user_id' => $this->session->user_id, //stored in session
    'company_id' => $this->session->company_id, //stored in session
    'field1' => $this->getParam('field1'), //frontend param (ajax)
    'field2' => $this->getParam('field2') //frontend param (ajax)
));

这就是我使用VueLaravel 的方法

const data = {
    user_id: this.$session.get('user_id'), //this is what i'm trying to get rid of
    company_id: this.$session.get('company_id'), //this is what i'm trying to get rid of²
    field1: this.field1,
    field2: this.field2
}

axios
   .post('/api/some/endpoint', this.data)
   .then(resp => {
      //...//
})

基本上,在此示例中,我不想总是将user_idcompany_id 作为post param 发送。

在这种情况下,有什么办法可以更好地“重用”代码?

【问题讨论】:

  • Laravel Passport 可能值得一看(特别是 Consuming Your API With JavaScriptlaravel.com/docs/5.8/…
  • 我其实用的是laravel护照,token默认是在axios headers上发送的。

标签: laravel vue.js session vuejs2


【解决方案1】:

1,您可以将会话数据保存在cookie中。浏览器会自动将您的 cookie 发送到服务器。用户注销时不要忘记删除cookie。

2、如果你仍然想使用 Vue session 或其他存储,你可以很容易地创建一个方法来包装你的 post 方法并将用户信息添加到有效负载中

function postRequest(url, payload) {
    payload.user_id = this.$session.get('user_id')
    payload.company_id = this.$session.get('company_id')
    return axios.post(url, payload)
}

每当您想发帖时使用此方法。

【讨论】:

  • 如果您使用它,是否有人不只是编辑他们的 cookie 并更改任何帐户的用户数据?
  • @DrRoach 我刚刚使用了 OP 代码。您知道,客户端中的所有内容都可以手动更改。所以对于你的问题,我们需要实现一个 OAuth 方法,比如访问令牌或其他东西。
  • 由于问题要求良好的做法,我认为使用像 JWT - jwt.io 这样的令牌会是一个更好的建议。
猜你喜欢
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
  • 1970-01-01
  • 2013-12-05
  • 2019-01-18
  • 1970-01-01
  • 2018-12-02
  • 2011-01-24
相关资源
最近更新 更多