在Web App和IOS App之间保留用户

时间:2019-03-06 15:34:43

标签: ios ruby-on-rails swift devise turbolinks

我有一个适用于台式机的应用程序,并使用IOS和ANDROID的Turbolinks包装器。我对ANDROID没有任何问题。但是在IOS上,如果用户退出桌面应用程序,则当他/她转到我的iPhone应用程序图标时,用户必须重新登录(请参阅下面的完整步骤)。

我的问题是:  -是什么原因造成的? (奇怪的不是ANDROID的问题)  -我需要什么/在哪里修复此问题。  -这是Rails方面的问题,turoblinks问题还是  -下面是Rails方面的代码。注意:我没有IOS应用程序代码-(使用移动程序员来帮助我)

我有一个使用- 1- Ruby on Rails宝石“ rails”,“ 5.2.2” 2- GEM-设计 gem“ devise”,“> = 4.2.0” 宝石“设计异步” 3-适用于本机Android / IOS的​​Turbolinks包装器- 4- Postgres

这是场景:

  • 用户已在桌面(IE / EDGE)上登录
  • 用户登录到IOS App并使用它。滑动关闭。单击图标。 重新登录正常。
  • 用户滑动应用已关闭
  • 用户注销桌面应用程序
  • 用户单击IOS上的APP ICON-它要求他们再次登录。 (这不是ANDROID上的问题

用户模型

before_save :ensure_authentication_token_is_present

265

    before_save :set_name
  266  
  ...
 1413    end
 1414  
 1415:   def ensure_authentication_token_is_present
 1416:     if authentication_token.blank?
 1417:       self.authentication_token = generate_authentication_token
 1418      end
 1419    end
 1420  
 1421:   def generate_authentication_token
 1422      loop do
 1423        token = Devise.friendly_token
 1424:       break token unless User.find_by(authentication_token: token)
 1425      end
 1426    end

会话控制器:

class Api::V1::SessionsController < Api::V1::BaseController



skip_before_action :authenticate_user!
  skip_before_action :authenticate_user_using_x_auth_token

  skip_before_action :verify_authenticity_token,   only: :destroy
  before_action      :authenticate_user_by_token!, only: :destroy

  def create

        user = User.find_for_database_authentication(email: params[:user] && 

params[:user][:

email])
        if invalid_password?(user)
          respond_with_error("Incorrect email or password", 401)
        else
          render(
            json: { auth_token: user.authentication_token },
            location: root_path,
            status: :created
          )
        end
      end

  def destroy
    Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name)

    head :ok
  end

  private

  def invalid_password?(user)
    user.blank? || !user.valid_password?(params[:user][:password])
  end

end

身份验证方法

def authenticate_user_using_x_auth_token
user_email = params[:id].presence
auth_token = request.headers["X-Auth-Token"].presence

user = user_email && User.find_by(email: user_email)

if user && Devise.secure_compare(user.authentication_token, auth_token)
  sign_in user, store: false
else
  respond_with_error(
    "Could not authenticate with the provided credentials",
    401
  )
end

结束

def authenticate_user_by_token!
    auth_token = request.headers["X-Auth-Token"].presence
    user       = User.find_by(authentication_token: auth_token)

    if user.present?
      sign_in user, store: false
    else
      respond_with_error("Could not authenticate with the provided credentials", 401)
    end
  end

1 个答案:

答案 0 :(得分:1)

每次关闭时,

会话cookie都会在Turbolinks-iOS应用程序上清除。您可能正在使用永久性cookie,并且在注销时,如果设计正在清除user.remember_created_at,则cookie无效。

尝试将其添加到devise配置中:

config.expire_all_remember_me_on_sign_out = false

来源:https://support.microsoft.com/it-it/help/306996/how-to-disable-asp-session-state-in-asp-net