gpt4 book ai didi

ruby-on-rails - 在Rails应用程序中使用Omniauth-oauth2刷新 token

转载 作者:行者123 更新时间:2023-12-03 09:49:39 28 4
gpt4 key购买 nike

我在rails中使用omniauth-oauth2对支持oauth2的站点进行身份验证。在执行oauth跳舞之后,该站点向我提供了以下内容,然后将其保存到数据库中:

  • 访问 token
  • Expires_AT(打勾)
  • 刷新 token

  • 是否有omniauth方法可以在 token 过期后自动刷新,还是应该编写自定义代码来做到这一点?

    如果要编写自定义代码,那么助手是编写逻辑的正确地方吗?

    最佳答案

    Omniauth没有开箱即用地提供此功能,因此我使用了上一个答案和另一个SO答案来在我的模型User.rb中编写代码

    def refresh_token_if_expired
    if token_expired?
    response = RestClient.post "#{ENV['DOMAIN']}oauth2/token", :grant_type => 'refresh_token', :refresh_token => self.refresh_token, :client_id => ENV['APP_ID'], :client_secret => ENV['APP_SECRET']
    refreshhash = JSON.parse(response.body)

    token_will_change!
    expiresat_will_change!

    self.token = refreshhash['access_token']
    self.expiresat = DateTime.now + refreshhash["expires_in"].to_i.seconds

    self.save
    puts 'Saved'
    end
    end

    def token_expired?
    expiry = Time.at(self.expiresat)
    return true if expiry < Time.now # expired token, so we should quickly return
    token_expires_at = expiry
    save if changed?
    false # token not expired. :D
    end

    在使用访问 token 进行API调用之前,您可以调用如下方法,其中current_user是已登录的用户。
    current_user.refresh_token_if_expired

    确保安装 rest-client gem并在模型文件中添加require指令 require 'rest-client'ENV['DOMAIN']ENV['APP_ID']ENV['APP_SECRET']是可以在 config/environments/production.rb(或开发)中设置的环境变量

    关于ruby-on-rails - 在Rails应用程序中使用Omniauth-oauth2刷新 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21707734/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com