如何检查 logged-in Realm 用户是否通过 "Sign in with Apple" 登录?

How to check if the logged-in Realm user logged in via "Sign in with Apple"?

替代标题是“如何检查 logged-in Realm 用户通过特定身份验证提供商登录?”或“如何检查用户是否使用了特定的身份验证 provider/method?”


对于从匿名用户开始的应用程序,然后使用 user.linkUser(credentials: credential) 链接到另一个身份验证提供程序。由于 user 始终具有匿名用户或链接用户的值。

我如何知道当前 logged-in 用户是否已经与另一个身份验证提供者关联,例如“使用 Apple 登录”还是“Google”?需要知道此信息才能隐藏身份验证提供程序 sign-in 按钮。

在 RealmSwift 10.12.0

user下面有一个identifiers属性。它是一个 RLMUserIdentity 的数组。用户身份包含一个 providerType 字符串,https://docs.mongodb.com/realm-sdks/objc/latest/Classes/RLMUserIdentity.html#/c:objc(cs)RLMUserIdentity(py)providerType

下面是示例输出

print(">>> DEBUG:", user.identities.map { identity in (identity.identifier, identity.providerType)

[("611a27f9a1575af5ed15234e-lnnaeteekatdftrnsmpbpldr", "anon-user"), ("000766.23cbd125344c140b18ef0baa4deccaf32.61234", "oauth2-apple")]

现在您可以检查用户身份是否包含您关心的提供者并隐藏该提供者的“登录”button/link

https://github.com/realm/realm-cocoa/blob/d407cdc1c8be5f04c3decd37b88524855edfa7e8/Realm/RLMCredentials.mm

当您初始化一个领域应用程序时,它会默认检查 accessToken、刷新令牌和领域在成功登录后将用户数据存储在设备上所做的其他事情。 因此,您声明当前用户时的默认值应该从 Realm 应用程序实例中检索。就我而言,我使用 Web 开发,React 应用程序看起来像这样。

import React, { useState } from 'react';    
import LoginPage from 'containers/LoginPage';
import { RealmApp, getCustomCredentials } from './RealmApp';

function App() {
  const [currentUser, setCurrentUser] = useState(RealmApp.currentUser);

  const onAuth = async (data) => {
    const credentials = getCustomCredentials(data);
    const user = await RealmApp.logIn(credentials);
    setCurrentUser(user);
  };

  const App = () => {
    return (
      <Box className="app-root-component" sx={{ display: 'flex' }}>
        <h1>App</>
      </Box>
    );
  };

  return currentUser ? <App /> : <LoginPage onAuth={onAuth} />;
}

export default App;

这里有我的变量,它是 setter 函数

const [currentUser, setCurrentUser] = useState(RealmApp.currentUser);

我希望这能帮助你更接近苹果登录