Ruby Devise、SessionsController.create、json - 出现 NameError:未定义的“build_resource”?

2023-12-10

我对 Ruby 生态系统相当陌生,而且快要被淹没了。我想我是被 Visual Studio w C# 的简单智能感知宠坏了。无论如何,我在 Ubuntu 上使用 Ruby 1.9.3、Rails 3.2.13 和 Devise 3.0.3。 我可以通过电脑上的浏览器登录该网站。但是当我尝试从我们的 Phonegap 移动应用程序执行此操作时,我收到此错误:

NameError: '未定义的局部变量或方法'build_resource' for # ..

这是sessions_controller.rb中的代码:

class SessionsController < Devise::SessionsController
  def create
    respond_to do |format|
      format.html {
        super
      }
      format.json {
        build_resource  # <-This line is evidently producing an error!
        user = User.find_for_database_authentication(:email => params[:user][:email])
        return invalid_login_attempt unless resource
        return invalid_login_attempt unless user
..

显然,正是包含 build_resource 的行产生了错误。如果有任何帮助指出我该去哪里,我将不胜感激。那条线到底有什么作用?这是一个方法调用吗?人们如何发现那所谓的东西?


如果你走的话here你会看到设备registrations_controller。

它有 build_resource 方法,您在 session_controller 中调用该方法

  # Build a devise resource passing in the session. Useful to move
  # temporary session data to the newly created user.
  def build_resource(hash=nil)
    self.resource = resource_class.new_with_session(hash || {}, session)
  end

问题是它是受保护的(在 protected 行下),这意味着 build_resource 方法只能从设备registrations_controller 中调用。

它与浏览器配合使用的原因是sessions_controller 中的创建操作调用

super

这意味着它从设计sessions_controller调用创建操作,您的sessions_controller继承自 -

#devise/sessions_controller
def create
    self.resource = warden.authenticate!(auth_options)
    set_flash_message(:notice, :signed_in) if is_flashing_format?
    sign_in(resource_name, resource)
    yield resource if block_given?
    respond_with resource, location: after_sign_in_path_for(resource)
  end

This gist展示如何通过 json api 登录用户。

它使用这个包括

include Devise::Controllers::InternalHelpers

在sessions_controller中。我认为这使得可以使用build_resource method.

祝你好运!

Edit

def create
    respond_to do |format|
    # when you log into the application through a web browser you go to the format.html option
    # Thus you're not calling the build_resource method
      format.html {
        super
      }
    # So, lets try to sign in without the build_resource 
    # I am not really sure what you can do, but try this
      format.json { 

        resource = User.find_for_database_authentication(:login=>params[:user_login][:login])
        return invalid_login_attempt unless resource

        if resource.valid_password?(params[:user_login][:password])
          sign_in("user", resource)
          render :json=> {:success=>true, :auth_token=>resource.authentication_token, :login=>resource.login, :email=>resource.email}
        return
        end
        invalid_login_attempt
      end
        # build_resource  # <-This line is evidently producing an error!
        # user = User.find_for_database_authentication(:email => params[:user][:email])
        # return invalid_login_attempt unless resource
        # return invalid_login_attempt unless user
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby Devise、SessionsController.create、json - 出现 NameError:未定义的“build_resource”? 的相关文章

随机推荐

  • Lucene 有快速、准确的荧光笔吗?

    我一直在使用 Java Lucene 荧光笔 在沙箱包中 一段时间 然而 当涉及到匹配搜索结果中的正确术语时 这并不是非常准确 它适用于简单查询 例如搜索两个单独的单词将突出显示结果中的两个代码片段 但是 它对于更复杂的查询表现不佳 在最简
  • Angular:从资产文件夹中读取所有文件

    tltr 我可以从角度访问资产目录吗 我的文件夹中有一堆 SVGsrc assets icons我使用的mat icon 唯一的缺点是当我添加新图标时 我必须添加文件 并且必须将文件名添加到一个数组中 我用该数组循环将其添加到matIcon
  • 如何使用星号等引导图标来给出星级评定?

    如何使用 Bootstrap 图标通过 css 或 jquery 给出星级评级 由于我被告知不要为此使用任何插件 因此我对如何更改星形图标的颜色以及如何使星形图标从起始星形到单击星形的颜色感到困惑 你实际上可以这样做PURE CSS 演示小
  • 打字稿限制对象属性的数量

    是否可以限制对象属性的数量 假设我想限制对象只有一个字符串属性 具有任何名称 我可以这样做 index string any 限制属性的类型 但是可以限制属性的数量吗 Stackoverflow 上这个问题有很多答案 包括这个详细的 但它们
  • Java OpenCV + Tesseract OCR“代码”识别

    我正在尝试自动化一个流程 其中有人手动将代码转换为数字代码 然后我开始阅读有关 OCR 的内容 所以我安装了 tesseract OCR 并在一些图像上进行了尝试 它甚至没有检测到接近代码的东西 在阅读了 stackoverflow 上的一
  • 从 GitHub 克隆存储库

    我正在开发一个项目 需要在 div 中添加拖放功能 然后我开始查看拖放功能的库 这些库也应该适用于移动设备 并找到了一个这样的库 名为Dragula 我尝试在我的机器中克隆存储库 我下载了 git 看起来像这样 但问题是我无法从 GitHu
  • .htaccess - 使目录不可见

    我有一个 htaccess 文件 当前如下所示
  • SwiftUI 列表颜色背景

    如果我列出静态项目 我无法更改视图的背景颜色 这是我的代码 NavigationView ZStack Color AppBackgroundColor edgesIgnoringSafeArea all List Section head
  • Crosswalk 使 Visual Studio Android 模拟器崩溃

    这段代码 public class MainActivity extends Activity Override protected void onCreate Bundle savedInstanceState super onCreat
  • Xamarin 表单:ios 的启动器图标

    我正在尝试从 Mac 设置 xamarin forms ios 项目的启动器图标 我执行了以下操作 但仍然显示默认图标 1 在解决方案资源管理器中双击 Info plist 文件将其打开进行编辑 2 向下滚动到应用程序图标部分 3 From
  • 如何在 Jquery 成功方法中获取“最后插入数据库的 ID”?

    好吧 在我的添加联系人表单中 我使用 Jquery 和 Php 将数据插入到 Mysql 数据库 已成功将数据插入数据库 现在我要将成功的页面重定向到index php cdid last id 但我怎样才能得到这个jquery成功方法中的
  • 不区分大小写的 utf8 选择

    在 SQLite 中我想不区分大小写 SELECT LIKE name 对于正常的拉丁名称工作正常 但是当名称为 UTF 8 且包含非拉丁字符时 选择将区分大小写 如何使其像拉丁字符一样不区分大小写 附注我的 sqlite 是 v3 并且我
  • 是 Azure DevOps 构建管道,有没有办法从另一个作业中取消一个管道作业?

    我有一个 Azure DevOps 构建管道 其中包含两个代理作业 我将其称为作业 A 和作业 B 我希望这些作业同时运行 但如果作业 A 失败 那么我不需要作业 B 运行完成 有没有办法向作业 A 添加一个任务 如果作业 A 的任何任务失
  • 通过key获取字典值

    如何通过函数上的键获取字典值 我的功能代码 以及我尝试的命令不起作用 static void XML Array Dictionary
  • 如何使用事件 @select 从 Vue.js 的段落中选择一些文本?

    我正在使用 Vue jsNuxt在 SSR 中 我希望当我突出显示某些文本时获取该文本并对其执行操作 我找到了一种方法 可以用一些文本来做到这一点
  • 根据条件使用另一个表的列更新列值[重复]

    这个问题在这里已经有答案了 我有两张桌子 表1 id 商品 价格 值 id item price 10 book 20 20 copy 30 30 pen 10 table2 id 商品 价格 值 id item price 10 book
  • 为什么图像没有保存在 django 的媒体目录中?

    我正在尝试将图像保存在 media images 目录中 并已完成下面描述的每个必要步骤 但毕竟 我没有在我的目录中获取图像 请有人指导我问题出在哪里 谢谢 模型 py from django db import models Create
  • 设备 (iPhone/iPad) 上的 Cocos2d/Box2d 应用程序中的内存警告

    这是信息个人资料 gt 泄漏在 Xcode 中 我在 iPad 2 上运行了大约 21 分 12 秒 然后崩溃了 实时字节 5 45 MB 生活 13547 暂时 3845036 总字节数 720 31 MB 当应用程序在设备上运行时 应用
  • Azure SQL 数据库触发器将审核信息插入 Azure 表

    我正在开发一个数据库审计解决方案 并正在考虑让 SQL Server 触发器处理更改并将它们插入到审计表中 由于这是一个 SQL Azure 数据库并且相当大 因此我担心由于审计而导致数据库不断增长的成本 为了减少审计所需的成本 我正在考虑
  • Ruby Devise、SessionsController.create、json - 出现 NameError:未定义的“build_resource”?

    我对 Ruby 生态系统相当陌生 而且快要被淹没了 我想我是被 Visual Studio w C 的简单智能感知宠坏了 无论如何 我在 Ubuntu 上使用 Ruby 1 9 3 Rails 3 2 13 和 Devise 3 0 3 我