从 Strapi (React Native) 注销用户?

Posted

技术标签:

【中文标题】从 Strapi (React Native) 注销用户?【英文标题】:Logout user from Strapi (React Native)? 【发布时间】:2022-01-22 22:12:38 【问题描述】:

我一直在尝试从我的 React 本机应用程序(使用 Strapi)中注销已登录的用户。我应该将其重定向到任何特定的 URL 还是可以删除 JWT 令牌?如果是,请指出我正确的方向。 出于显而易见的原因,将“注销”按钮重定向到登录页面并不会结束已登录用户的会话。

<Button
      mode="outlined"
      onPress=() => navigation.navigate('Login')
      style=styles.button2
      labelStyle=
        color: '#48b749',
        fontSize: 12,
        fontWeight: 'bold',
        textAlignVertical: 'center',
        textAlign: 'center',
      >
Logout
</Button>

【问题讨论】:

【参考方案1】:

您可以将登录的用户详细信息存储在异步存储等持久状态中,当用户注销时删除此详细信息。你可以做这样的事情。

if(loggedInUser) return &lt;AuthenticatedStack /&gt; return &lt;UnauthenticatedStack /&gt;

当您从异步存储中删除此 loggedInUser 时,它将重定向到未经身份验证的堆栈或登录屏幕。

【讨论】:

【参考方案2】:

实际上,您已经朝着正确的方向前进。 Strapi 没有任何 api 用于注销用户,因为注销仅在客户端本地完成。这只需要您从浏览器中删除jwtusername 令牌localStorage

让我在下面为您提供他们strapi blog 帖子中的引述。

我们设置了两个端点:

登录:对用户进行身份验证。成功验证后,JWT 令牌将在响应的 jwt 属性中可用 对象。 user:获取认证用户的信息。如果用户通过身份验证,JWT 令牌将被添加到请求中,允许 Strapi 来识别用户。由于响应对象已经是 用户信息本身,我们将 propertyName 设置为 false。

我们还禁用了注销端点,因为注销用户是 只在本地完成,不需要对 Strapi 的 API 提出任何请求。这 当用户注销时,令牌会从本地存储中删除。

说到你要写的那种代码,你可以参考下面的sn-p:
import  useHistory  from "react-router-dom";

let history = useHistory();

logout() 
  localStorage.removeItem('jwt');
  localStorage.removeItem('username');
  history.push("/sigin");

参考资料:
    Strapi auth example in React

【讨论】:

以上是关于从 Strapi (React Native) 注销用户?的主要内容,如果未能解决你的问题,请参考以下文章

Strapi 自定义路由重定向到公共目录

从Hybrid到React-Native: JS在移动端的南征北战史

react native 安卓打包--mac环境,如果打包不成功可注意下my-release-key.keystore的位置关系(绝对路径)

无法使用 GraphQL 和 Apollo 将文件上传到 Strapi

React Native安装及搭建

vscode 搭建react-native