如何为 Rails 设置远程 json API 以进行身份​​验证和会话

2024-01-10

我是 Rails 新手,对 Devise Gem 有相当基本的了解。除了 CRUD 和视图之外,我不清楚它提供了什么可以帮助我让 AngularJs 应用程序与 Rails Json Api 进行对话。

目前我正在用手滚动东西。为了安全起见,我在客户端(js)和服务器之间交换 HTTP 标头令牌。我还使用 Railscast #250 进行用户身份验证 - 但因为我不知道如何为远程客户端应用 SessionController。

我可以采用任何策略通过远程 json API 进行身份验证和管理会话吗?

Thanks!


我个人不会使用 devise 来做这样的事情,因为无论如何你只会使用其中的一小部分

Dont

您几乎只是不使用会话。您需要做的就是每次传递基本身份验证,并在应用程序控制器中确定其是否有效,如果不有效,则仅向它们发送回身份验证错误。

请求示例:http://username:[email protected] /cdn-cgi/l/email-protection/api/endpoint

class ApplicationController
  before_filter :check_auth!

  private
  def check_auth!
    username, password = ActionController::HttpAuthentication::Basic::user_name_and_password(request)
    user = User.find_by(username: username)
    if user && user.encrypted_password == SomeEncryptFunction(params[:password])
      @current_user = user
    else
      raise "error"
    end
  end
end

但如果你想...

然后你可以做的是更新DateTime当用户第一次进行身份验证(启动会话)时,他们可以只传递一个您给他们的令牌,您每次登录时都会检查该令牌。您还可以检查是否只有一定的时间自他们第一次验证以来就通过了,否则他们的会话无效。

class SessionsController < ApplicationController
  skip_before_filter :check_auth!
  before_filter :login!

  private
  # Note: I don't remember the actual devise method for validating username + password
  def login!
    user = User.find_by(username: params[:username])
    if user && user.valid_password(params[:password])
      current_user = user
      current_user.update_attributes(
        authenticated_at: DateTime.now,
        authentication_token: Devise.friendly_token
      )
    else
      raise "error"
    end
  end
end

class ApplicationController
  before_filter :check_auth!

  private
  def check_auth!
    if valid_token(params[:token])
      current_user = User.find_by(authentication_token: params[:token])
    else
      raise "error"
    end
  end

  # Returns true if token belongs to a user and is recent enough
  def valid_token(token)
    user = User.find_by(authentication_token: params[:token])
    user && user.authenticated_at < DateTime.now - 1.day
  end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 Rails 设置远程 json API 以进行身份​​验证和会话 的相关文章

随机推荐

  • 在 OpenCL 中,mem_fence() 与 Barrier() 相比有何作用?

    Unlike barrier 我想我明白 mem fence 不影响工作组中的所有项目 OpenCL 规范指出 第 6 11 10 节 对于mem fence 命令加载和存储执行内核的工作项 所以它适用于single工作项 但同时 在第 3
  • 如何从实例创建 Amazon EC2 AMI? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 如何从实例创建 EC2 AMI 好的 我得到了一个 EC2 帐户 我使用 Fedora 8 Apache MySQL PHP 启动了一个实例 我还配置
  • Java:定义术语初始化、声明和赋值

    我发现 defs 是循环的 主语是由动词定义的 但动词是未定义的 那么你如何定义它们呢 循环定义 初始化 初始化一个变量 可以在以下时间完成 宣言 任务 给变量赋值 它可以在任何地方完成 只需使用最终标识符一次 宣言 为变量声明值 更新 尝
  • 如何从类型安全配置中配置系统属性或 logback 配置变量?

    我的变量中有默认值logback xml配置文件 我希望能够从我的类型安全配置中选择设置这些变量application conf file 我正在使用 one jar 部署应用程序 并且application conf打包在可部署 jar
  • 恢复原来的合并后合并

    好吧 当我将一些代码合并到存储库时 我不专心 某些代码的流程发生了重大变化 所以我不得不恢复合并提交 我回家了一天 现在 master 上有更多提交 我似乎无法触发合并 以便我可以将我的代码放入 master 中 因为我有两个文件之间的差异
  • 在 O(1) 中实现堆栈(push、pop 和 findmin)

    我已经看过这个问题的两个堆栈实现 但我真的很困惑如何获得 O 1 操作 考虑以下示例 S1 3542761986759 S2 3332221111111 这里的想法 算法是 将元素 E 推到 S1 上 检查 S2 的顶部是否 gt E 如果
  • 连接顺序如何影响查询性能

    我在查询中遇到了时间性能的巨大差异 并且查询中连接 内部和左外部 发生的顺序似乎造成了所有差异 是否有一些 基本规则 应按什么顺序加入 它们都是更大查询的一部分 它们之间的区别在于左连接在更快的查询中放在最后 慢查询 gt 10分钟 SEL
  • 在 EditorFor 和 DisplayFor 之间切换

    我有一个部分视图 它设置为显示数据库记录的表 网格 我可以轻松地让它显示该行的显示或编辑器模板 但是如何从displayFor to editorFor当我单击并编辑或保存链接时 div div class divQuestionItems
  • 将 JSON 字符串转换为 Lua 表?

    我需要将 Json 字符串转换为 Lua 中的表数据结构 我正在使用以下代码 local json require json local t name1 value1 name2 1 false true 23 54 a 021 strin
  • 防止传单 R-Map 缩小?

    我用传单 R 包制作了传单地图 This is what the result looks like 我对此非常满意 但是当我将其嵌入网站并用笔记本电脑向下滚动文章时 我经常会不小心缩小地图 然后看起来像这样 用户也必须放大才能看到地图上有
  • 覆盖 SharePoint 2010 中的 X-UA 兼容元

    我正在使用 SharePoint 2010 我想使用对于特定页面 母版页将其设置为 IE 8 这不允许我在 CSS 中使用 box shadow 例如 我无权访问母版页来更改它 我还读到 不建议更改母版页中的元 因为它可能会导致日历等其他内
  • 读取 NetworkStream 不会推进流

    我有一个客户端 服务器应用程序 其中服务器传输一个 4 字节整数 指定下一次传输的大小 当我在客户端读取 4 字节整数 指定 FILE SIZE 时 下次读取流时 我会读取 FILE SIZE 4 个字节 从此流读取时是否需要将偏移量指定为
  • python 和 numpy 中的随机数生成器是什么?

    import random import numpy random 算法是什么random and numpy random 通常Mersenne Twister是matlab的默认生成器 并且可以选择使用哪个生成器 python 呢 有随
  • 在 AS3 中创建自定义 Trace() 类

    我想到了扩展我的trace 消息 Why trace 遍布我的代码 我想通过一个简单的命令打开 关闭它们 并且可能向trace 添加某种优先级功能 即 myTrace TraceMsg loosehere debugme 0 myTrace
  • 为什么 Google App Engine 在登录期间附加到我的“继续”位置的路径?

    我正在使用 Greasemonkey 脚本中的一个非常简单的 GAE 实例 这在过去几个月工作得很好 但现在一条路径被附加到最终的 继续 位置 这破坏了我的登录过程 基本工作流程 假设用户已登录其 Google 帐户 但其 GAE 实例的令
  • Typescript Node.js 应用程序中的 guid/uuid

    我尝试做一个uuid v 3 0 1 包在 Node Typescript 应用程序中工作 但我不确定应该导入什么以及如何使用它 This is index d ts from types uuidv 2 0 29 declare name
  • SPOJ 370 - 一和零 (ONEZERO)

    我正在尝试解决SPOJ 问题 1 和 0 http www spoj com problems ONEZERO 某些正整数的十进制表示仅由 1 和 0 组成 并且至少有一位数字 1 例如101 如果一个正整数不具有这样的性质 可以尝试将它乘
  • 使工具栏按钮样式应用于工具栏中的用户控件

    如何强制 WPF 中 ToolBar 内的 UserControls 使用 ToolBar 的默认按钮样式 我有一个名为 ImageButton 的简单用户控件 它的 XAML 如下所示
  • 只允许某些网站访问 PHP API

    我目前面临着保护客户在其网站上使用的 API 安全的问题 然而 因为这个 API 是由 JavaScript 调用的 所以我发现很难找到一种方法来只允许这些访问 API URL 那么我该怎么办呢 我如何只允许访问这些链接 显然 链接可能会受
  • 如何为 Rails 设置远程 json API 以进行身份​​验证和会话

    我是 Rails 新手 对 Devise Gem 有相当基本的了解 除了 CRUD 和视图之外 我不清楚它提供了什么可以帮助我让 AngularJs 应用程序与 Rails Json Api 进行对话 目前我正在用手滚动东西 为了安全起见