小编Dia*_*ism的帖子

如何让Rails API在另一个域上运行的客户端上的cookie中设置JWT?

很久的潜伏者,第一次在这里发布海报.

有关JWT的许多良好指南和资源以及如何以及在何处存储它们.但是,当涉及到在节点服务器上运行的ReactJS/Flux应用程序和完全独立的Rails API之间安全地存储和发送JWT时,我陷入了僵局.

似乎大多数指南告诉您只需将JWT存储在本地存储中,然后为每个AJAX请求将其解析出来并将其传递到标题中.https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage/警告不要这样做,因为本地存储不安全,恶意的人可以访问该令牌.它建议将其存储在cookie中,只是让Web浏览器将其与每个请求一起传递.

这听起来不错,因为根据我的理解,无论如何都可以方便地将cookie与每个请求一起发送.这意味着我可以从我的ReactJS应用程序向我的Rails API发出AJAX请求,并让API将其拔出,检查它,并做到这一点.*

我遇到的问题是我的Node应用程序没有从它从Rails API返回的响应中设置cookie,即使Rails API(在localhost:3000上运行)返回Set-Cookie标头并将其发送回ReactJS/Node应用程序(在localhost:8080上运行).

这是我的Rails API方面的登录控制器操作:

class V1::SessionsController < ApplicationController
  def create
    user = User.where(email: params[:user][:email]).first!
    if user && user.authenticate(params[:user][:password])
      token = issue_new_token_for(user)

      # I've tried this too.
      # cookies[:access_token] = {
      #     :value => token,
      #     :expires => 3.days.from_now,
      #     :domain => 'https://localhost:8080'
      # }

      response.headers['Set-Cookie'] = "access_token=#{token}"

      render json: { user: { id: user.id, email: user.email }, token: token }, status: 200
    else
      render json: { errors: 'username or password did …
Run Code Online (Sandbox Code Playgroud)

cookies ajax ruby-on-rails jwt reactjs

6
推荐指数
0
解决办法
989
查看次数

标签 统计

ajax ×1

cookies ×1

jwt ×1

reactjs ×1

ruby-on-rails ×1