ruby-on-rails – 如何将门卫访问令牌作为json返回
发布时间:2020-12-17 03:41:11 所属栏目:百科 来源:网络整理
导读:我正在尝试为iOS应用程序创建一个登录系统,其中导轨后端由设备和门卫提供支持. 我想限制网络请求的数量,因此不希望必须从凭证中获取令牌,然后将用户详细信息作为单独的请求获取. 这是我目前的尝试: token = Doorkeeper::AccessToken.create!(application_id
我正在尝试为iOS应用程序创建一个登录系统,其中导轨后端由设备和门卫提供支持.
我想限制网络请求的数量,因此不希望必须从凭证中获取令牌,然后将用户详细信息作为单独的请求获取. 这是我目前的尝试: token = Doorkeeper::AccessToken.create!(application_id: @application_id,resource_owner_id: current_user.id,:expires_in => 168.hours) puts token.token render :json => {:user => current_user,:token => token.as_json(:include=> token)},status: :ok,location: :users 然而,返回的是: {"user":{"id":2,"email":"user3@test.com","created_at":"2014-06-12T17:25:12.000Z","updated_at":"2014-06-13T12:20:18.536Z","firstName":"user","lastName":"test","subscription":null},"token":{"resource_owner_id":2,"scopes":[],"expires_in_seconds":604800,"application":{"uid":"[Filtered]"}}} 因此,实际的access_token键不会被传回以允许我进行将来的调用. 有谁知道如何返回AccessToken,包括访问令牌本身,如json? 解决方法
我处理这个问题的方法是创建一个自定义令牌控制器并覆盖令牌请求操作.在那里,我可以添加自定义的东西来回应.
# app/controllers/custom_tokens_controller.rb class CustomTokensController < Doorkeeper::TokensController # Overriding create action # POST /oauth/token def create response = strategy.authorize body = response.body if response.status == :ok # User the resource_owner_id from token to identify the user user = User.find(response.token.resource_owner_id) rescue nil unless user.nil? ### If you want to render user with template ### create an ActionController to render out the user # ac = ActionController::Base.new() # user_json = ac.render_to_string( template: 'api/users/me',locals: { user: user}) # body[:user] = Oj.load(user_json) ### Or if you want to just append user using 'as_json' body[:user] = user.as_json end end self.headers.merge! response.headers self.response_body = body.to_json self.status = response.status rescue Doorkeeper::Errors::DoorkeeperError => e handle_token_exception e end end 只需确保在routes.rb中指向此控制器即可 # routes.rb Rails.application.routes.draw do # Doorkeeper use_doorkeeper do controllers :tokens => 'custom_tokens' end # Your other routes here... end 这是经过测试的,它可以工作,我在我的项目中使用它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |