react 中实现登录鉴权

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了react 中实现登录鉴权相关的知识,希望对你有一定的参考价值。

参考技术A vue中会使用导航守卫判断token,

react中使用redirect 方式

使用高阶组件 定义PrivateRoute 导出

在router中 用

 <PrivateRoute path="/admin/roles" exact  component=Roles></PrivateRoute>

的方式判断需要token的路由

import React,  Component  from 'react'

import Redirect, Route from 'react-router-dom'

function PrivateRoute( component:Children, ...rest ) 

    return (

      <Route

        ...rest

        render=() =>

          let token =  localStorage.getItem('token')

            if(token)

            return  <Children/>

            else

            return   <Redirect

                to=

                '/login'

                />

            

        

        

      />

    );

  

  export default PrivateRoute

在 React 错误中实现 Google 登录 - <div> 标签上的 prop `data-callback` 的值无效

【中文标题】在 React 错误中实现 Google 登录 - <div> 标签上的 prop `data-callback` 的值无效【英文标题】:Implementing Google sign-in in React error - Invalid value for prop `data-callback` on <div> tag 【发布时间】:2021-08-09 23:21:31 【问题描述】:

我正在尝试在 React 中实现 google 登录。这是我的组件 -

import  Fragment, useEffect  from "react";
import  GOOGLE_CLIENT_ID  from "./some-file";

const GoogleSignIn = () =>  

  const googleSignInHandler = response => 
    console.log(response);
  

  const initGsi = () =>  
    if(window.google)  
        window.google.accounts.id.initialize(
            client_id: GOOGLE_CLIENT_ID,
            callback: googleSignInHandler
        );
    
  

  useEffect(() => 
   initGsi();
  , []);

  return (
    <Fragment>
      <div
        id="g_id_onload"
        data-client_id=GOOGLE_CLIENT_ID
        data-context="use"
        data-ux_mode="popup"
        data-auto_prompt="false"
      ></div>

      <div
        className=['g_id_signin', 'gsignin'].join(' ')
        data-type="standard"
        data-shape="rectangular"
        data-theme="filled_blue"
        data-text="continue_with"
        data-callback=googleSignInHandler
        data-size="large"
        data-logo_alignment="left"
      ></div>
    </Fragment>
  );
;

export default GoogleSignIn;
`

如果我设置data-auto_prompt="true" 即一键式,显然它可以工作。但是,我不知道如何使它适用于按钮单击。我真的不想使用 npm 包,此外它们也基于旧版 Google 登录。有什么办法吗?

【问题讨论】:

找到解决方案了吗? 您不能将回调放在数据属性中并希望获得对 DOM 的有效函数引用。请参阅这篇关于how React treats attributes that end up in the DOM 的帖子向下滚动到具有函数值的非事件属性 【参考方案1】:

我花了我一个晚上的时间来寻找谷歌一键式的解决方法,我的方法可能对你有用。主要问题:'react 将data-*** 属性作为字符串传递',这就是我们面临这些问题的原因。

    最简单的方法是创建类组件:

在下面的示例中,我创建了全局函数(customCallback)并将其与回调(data-callback=customCallback)绑定,谷歌正在等待。

export class OneTapV2 extends React.Component 
  constructor(props) 
    super(props)
    window.customCallback = this.customCallback
  

  customCallback(e) 
    console.log('ONE TAP version 2 ', e)
  

  render() 
    return (
      <div
        id='g_id_onload'
        data-client_id='GOOGLE_ID'
        data-callback='customCallback'
      />
    )
  
    此案例适用于其他无法使用 oneTap OAuth 进行管理的人。小伙伴们请看https://developers.google.com/identity/gsi/web/guides/use-one-tap-js-api;他们描述了如何通过 JS 打开 oneTap 窗口

【讨论】:

你是对的。只是为了确保我找到了这篇关于 how React treats attributes that end up in the DOM 的帖子,向下滚动到 具有函数值的非事件属性

以上是关于react 中实现登录鉴权的主要内容,如果未能解决你的问题,请参考以下文章

每日一博 - 微服务权限一二事

鉴权,开放式授权,单点登陆

手动设置spring security auth记住我

网站常见的鉴权认证方式有哪几种?

若依实现单点登录(解析请求链接中的参数做鉴权认证)

Spring Boot项目鉴权的4种方法