You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Doorkeeper、Devise的Expo Auth Session登录后浏览器不关闭如何解决?

解决 Expo Auth Session + Devise 登录后浏览器不关闭的问题

问题现象

在React Native应用中使用expo-auth-session做OAuth身份验证时,登录/注册操作完成后,唤起的浏览器窗口不会自动关闭。但如果再次发起登录请求,因为浏览器已有会话,操作能正常完成且窗口会关闭。

原因分析

Expo内置浏览器无法处理Rails Turbo返回的TURBO STREAM格式响应,而Devise默认启用Turbo,导致登录后的回调响应格式不被Expo识别,无法触发窗口关闭逻辑。

解决步骤

只需禁用Devise登录/注册表单的Turbo功能,确保oauth/authorize端点返回HTML格式响应即可:

  1. 修改Devise表单
    在Devise生成的登录或注册表单中,添加data-turbo="false"属性:
<%= form_for(resource, as: resource_name, url: session_path(resource_name), data: { turbo: false }) do |f| %>
  <!-- 原有表单内容 -->
<% end %>
  1. 或在控制器中强制响应格式
    如果不想修改表单,可在Devise的Sessions控制器中重写create方法,明确指定响应格式为HTML:
class Users::SessionsController < Devise::SessionsController
  def create
    super do |resource|
      respond_to do |format|
        format.html { super }
        format.turbo_stream { redirect_to after_sign_in_path_for(resource), format: :html }
      end
    end
  end
end

设置完成后,登录/注册操作结束时,Expo浏览器能正确识别HTML响应,触发expo-auth-session的回调逻辑,自动关闭浏览器窗口。

内容的提问来源于stack exchange,提问作者Tim Dowling

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 16:22:13