OmniAuth Facebook 令牌过期错误

2024-01-23

我正在使用 OmniAuth 在我的应用程序中访问 Facebook。我正在使用 fb_graph gem:https://github.com/nov/fb_graph https://github.com/nov/fb_graph发布到 Facebook。我正在 Heroku 上为此应用程序运行omniauth-0.3.0。当用户稍后登录时,我在创建用户时保存的令牌会发生更改。

创建用户的代码

    class SessionsController < ApplicationController  
    def create  
     auth = request.env["omniauth.auth"]  
     user = User.find_by_provider_and_uid(auth["provider"], auth["uid"])||           
     User.create_with_omniauth(auth)
       session[:user_id] = user.id  
       redirect_to root_url, :notice => "Signed in!"  
         end 

用户模型是:

  def self.create_with_omniauth(auth)  
    create! do |user|  
    user.provider = auth["provider"]  
    user.uid = auth["uid"]  
    user.name = auth["user_info"]["name"] 
    user.token = auth["credentials"]["token"]
    end
   end

我现在在大约 30% 的用户身上看到这个错误 -

 FbGraph::InvalidToken (OAuthException :: Error validating access token: Session does not match current stored session. This may be because the user changed the password since the time the session was created or Facebook has changed the session for security reasons.)

我看到 OmniAuth 最近修复了过期令牌问题:

https://github.com/soopa/omniauth/commit/67bdea962e3b601b8ee70e21aedf5e6ce1c2b780 https://github.com/soopa/omniauth/commit/67bdea962e3b601b8ee70e21aedf5e6ce1c2b780

我使用此代码尝试刷新访问令牌。但是,我仍然遇到同样的错误。有人可以指出我缺少什么吗?有没有其他方法可以在用户每次登录时更新令牌?

唯一有效的解决方案是每次用户登录时创建一个新用户(我根本不喜欢这个解决方案):

  def create  
    auth = request.env["omniauth.auth"] 
    user = User.create_with_omniauth(auth)
    session[:user_id] = user.id  
    redirect_to root_url, :notice => "Signed in!"  
  end

Thanks!


您只需在创建会话时更新令牌即可。

class SessionsController < ApplicationController  
def create  
  auth = request.env["omniauth.auth"]  
  user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]).tap do |u|
           u.update_attributes(:token => auth["credentials"]["token"]) if u
         end || User.create_with_omniauth(auth)
  session[:user_id] = user.id  
  redirect_to root_url, :notice => "Signed in!"  
end 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OmniAuth Facebook 令牌过期错误 的相关文章

随机推荐

  • Heredocs 如何与 xargs 一起使用?

    背景 我正在寻找剥离任何 TODO一些Python源代码文件输出的注释git archive在发送之前 我希望通过一个将从各种 nix 操作系统运行的脚本来执行此操作 因此它应该尽可能符合 POSIX 标准 我知道find print0 a
  • NaN 中的错误,但它们指向不同的模块。 ... Webpack 无法区分上下文,并且无法加载正确的上下文

    NaN 中的错误但它们指向不同的模块 Users USER eclipse workspace nms bin main webapp app admin admin module ts 和 Users USER eclipse works
  • 滚动查看器子级上的 WPF 动画被滚动查看器剪辑

    大家好 我希望我有一个相当简单的问题 可以轻松解决 因为看起来我只是缺少 WPF 世界中的一些基本内容 我有一个滚动查看器 其中包含一个包含多个图像的堆栈面板 这些图像具有动画 当鼠标经过它们时 它们的尺寸会增加 一切正常without滚动
  • 如何根据现有地图中的值创建新地图

    有下一张原始地图 G1 7 8 45 6 9 G2 3 9 34 2 1 65 G3 6 5 9 1 67 5 其中 G1 G2 和 G3 是人的年龄组 我如何创建这样的新地图 45 7 8 45 6 9 65 3 9 34 2 1 65
  • Matlab 中的动态结构生成

    我有一个字段名称列表 想要生成一个嵌套结构 我试过这个 fn1 a b c fn2 d e f s struct for n1 fn1 for n2 fn2 s n1 n2 0 end end 但 Matlab 抱怨符号 fieldname
  • 在所有数据库的所有对象中查找表名

    我有一个包含多个数据库和客户端应用程序的系统 所有数据库都位于一个 SQL Server 实例中 它们是由不同的人在不同的时间开发的 因此 如果发生某些错误 则很难找到数据在哪个过程或触发器中被修改 现在我使用这个脚本 我在这个网站上找到了
  • 如何将ggplot图标题居中

    在 ggplot 中居中对齐绘图标题的 lege artis 方式 绘图标题 element text hjust 0 5 https stackoverflow com questions 40675778 center plot tit
  • 谷歌人工智能平台与机器学习引擎

    我做了很多搜索 但我不明白它们之间有什么区别google ai platform and ml engine 看起来它们都可以用于训练和部署模型 其他诸如 google cloud automl google ai hub 之类的词也很令人
  • 如何获取R中当前的工作目录?

    如何获取当前工作目录 我想应该有一个像 getcwd 这样的命令 但是 我在文档中找不到类似的命令 如何更改到另一个目录 启动R时如何设置默认工作目录 版本 平台 x86 64 w64 mingw32拱门x86 64操作系统 mingw32
  • 为什么我的代码只使用字符串替换方法替换某些字符?

    对于我的作业 我必须编写代码来编码 解码消息 当我开始发现每当我键入消息时 程序仅替换某些字符时 我已接近尾声 翻译相当简单 要编码 您将 a 更改为字母表中相反的字母 即 z b 到 y c 到 x d 到 w 等 作业如下 该项目涉及编
  • 在 jetpack compose 中使用 LaunchedEffect 与 SideEffect

    大家好 我正在学习项目中的副作用 我想知道我什么时候应该使用LaunchedEffect and SideEffect在什么场景下 我正在添加一些使用这两种效果的代码 如果我在这里做错了 请让我知道 第一次使用 LaunchedEffect
  • Collections.synchronizedlist() 在从末尾迭代时删除元素[重复]

    这个问题在这里已经有答案了 我在用Collections Synchronizedlist 使我的arraylist线程安全 我想问的是以下代码是线程安全的 即在从末尾迭代列表时删除 pendingExecutionList Collect
  • 从 Google Chrome 扩展程序中的通知切换当前选项卡

    我在 Chrome 中遗漏了什么吗选项卡文档 http code google com chrome extensions tabs html或者有没有办法让扩展程序更改当前活动的选项卡 我有一个扩展 一旦选项卡完成加载 就会弹出一个通知
  • 在 BreezeJS 客户端中解析元数据时出现异常

    前传和版本信息 BreezeJS客户端版本 1 5 2 通过设计时 EntityFramework 模型在自定义服务器上生成的元数据 6 1 2 BreezeLabs EdmBuilder 1 0 5 生成元数据时也遇到问题 可以在此处阅读
  • 更改O365邮件服务器后SSRS报告订阅错误

    我们有一个订阅服务 它会向每位顾问发送一封邮件 说明他们未来几周的计划 两周前 我们已从本地邮件服务器更改为 O365 邮件服务器 自从这一变化以来 我注意到一些顾问没有收到他们应该收到的邮件 这让我查看了 RS 日志 两周前我有 6 个人
  • 如何在桌面上的文件夹中创建文本文件

    我的项目有问题 我的桌面上有一个项目文件夹 我想创建一个文本文件并写入包含该文本文件的内容 这是我的代码 ofstream example Users sample Desktop save txt 但我希望它可以在另一台Mac上运行 我不
  • Android:使图库无限循环图像

    我在我的项目中使用一个画廊 其中添加了四个图像 并且我希望它从右侧和左侧都是无限的 我该如何实现这个目标 主要思想是在你的getView方法 你必须使用 position position imagesArray length if pos
  • org.javafxports 有什么区别 » jfxmobile-plugin 1.3.16 和 2.0.30

    org javafxports jfxmobile plugin 1 3 16 和 2 0 30 有什么区别 我尝试将版本 1 3 16 更新到 2 0 30 但无法编译项目 jfxmobile plugin 是一个 gradle 插件 它
  • 如何在Oracle sqlplus中编写for循环?

    我正在尝试在 Oracle sqlplus 接口中编写一个 for 循环 当编写循环语句并按 Enter 键时 出现错误 SQL gt for i in 1 10 loop SP2 0734 unknown command beginnin
  • OmniAuth Facebook 令牌过期错误

    我正在使用 OmniAuth 在我的应用程序中访问 Facebook 我正在使用 fb graph gem https github com nov fb graph https github com nov fb graph发布到 Fac