小编Mat*_*ber的帖子

如何使用makeStyles设置组件样式并在Material UI中仍然具有生命周期方法?

每当我尝试使用makeStyles()具有生命周期方法的组件时,都会出现以下错误:

无效的挂接调用。挂钩只能在功能组件的主体内部调用。可能由于以下原因之一而发生:

  1. 您可能使用了不匹配的React和渲染器版本(例如React DOM)
  2. 您可能正在违反挂钩规则
  3. 您可能在同一应用程序中拥有多个React副本

下面是产生此错误的代码的一个小示例。其他示例也将类分配给子项。我在MUI的文档中找不到任何显示其他使用方式makeStyles并可以使用生命周期方法的功能。

    import React, { Component } from 'react';
    import { Redirect } from 'react-router-dom';

    import { Container, makeStyles } from '@material-ui/core';

    import LogoButtonCard from '../molecules/Cards/LogoButtonCard';

    const useStyles = makeStyles(theme => ({
      root: {
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
      },
    }));

    const classes = useStyles();

    class Welcome extends Component {
      render() {
        if (this.props.auth.isAuthenticated()) {
          return <Redirect to="/" />;
        }
        return (
          <Container maxWidth={false} className={classes.root}>
            <LogoButtonCard
              buttonText="Enter"
              headerText="Welcome to PlatformX" …
Run Code Online (Sandbox Code Playgroud)

reactjs material-ui

45
推荐指数
3
解决办法
3万
查看次数

在生产 PostgreSQL 连接中将rejectUnauthorized 设置为 false 可以吗?

我们最近转移到 Heroku,并在尝试将我们的应用程序连接到数据库时,它不断拒绝我们的查询,并显示消息“自签名证书”。传递rejectUnauthorized解决了这个问题,但现在我想知道,我们应该在生产中这样做吗?如果没有,我们连接到 Heroku PG 数据库的合适方法是什么?

const pgp = require('pg-promise')(/*initOptions*/);
const {ConnectionString} = require('connection-string');

const cnObj = new ConnectionString(process.env.DATABASE_URL);

const cn = {
  host: cnObj.hostname,
  port: cnObj.port,
  database: cnObj.path?.[0],
  user: cnObj.user,
  password: cnObj.password,
  ssl: {
    rejectUnauthorized: false,
  },
};

const db = pgp(cn);
Run Code Online (Sandbox Code Playgroud)

postgresql ssl node.js heroku-postgres pg-promise

7
推荐指数
1
解决办法
6472
查看次数

将 API Keys 和 .env 文件提交到私有企业存储库是否可以接受?

我进行了搜索,令人惊讶的是没有找到答案。现在,我们不会将 API Keys/.env文件提交到一个不断增长的 4 人团队正在开发的存储库中。每当我们更改某些内容时,例如数据库密码,我们都会通过 Slack 将其发送给彼此。

考虑到我们的 repo 是私有的,不可分叉,并且只有员工可以访问,这似乎毫无意义。

我能看到这种情况出错的唯一方法是:

  1. 员工不小心公开发布了回购协议。尽管这无论如何都会是一场灾难,因为我们的整个代码库都是公开的,所以我看不出更改密钥和密码将如何成为我们最关心的问题。
  2. 员工帐户被盗。见上文^(我们也强制执行 MFA 作为一种安慰)。
  3. GitHub 本身遭到破坏,这又是我们(以及大多数软件公司)面临的更大问题。
  4. 在此处插入模糊的微软阴谋

我们是否有理由继续这种做法,或者我们可以提交我们的.env文件吗?

git security github environment-variables

6
推荐指数
1
解决办法
1309
查看次数

你应该如何存储访问令牌?

我们正在构建一个带有 React/Redux 前端和 NodeJS/Express 后端的应用程序。我不是安全专家,而是选择使用 Auth0 来处理身份验证。

当用户登录时,Auth0 会返回一个 ID 令牌和一个访问令牌,此访问令牌用于验证和访问我们的后端 API。

我们已经看到这个访问令牌之前存储在本地存储中,但 Auth0 然后与此处相矛盾。此外,在这个答案中,似乎有些人建议将其存储在 Local Storage 中,就像this one 一样

这让我非常困惑。我们如何在不将其存储在内存中的情况下存储和持久化令牌?我们只能将它存储在 Redux 中,但它会在刷新时清除,这不是解决方案。

Auth0 的身份验证流程图

在这里,他们显示用户登录并返回访问令牌,稍后它将与 API 请求一起发送,我理解,但同时将其存储在哪里?

我们应该如何存储访问令牌以便我们的应用程序可以访问我们的 API?或者我们根本不应该存储它?

authentication access-token jwt auth0 redux

5
推荐指数
1
解决办法
3217
查看次数

在 pg-promise 查询中使用 $1 比模板文字有好处吗?

使用pg-promise,使用$1模板文字有什么好处吗?模板文字对我来说更熟悉,但我必须假设他们由于这个包的原因而以不同的方式做。

“正常”方式:

db.any('SELECT * FROM users WHERE active = $1', [true])
Run Code Online (Sandbox Code Playgroud)

我这样做的方式:

const isTrue = true;

db.any(`SELECT * FROM users WHERE active = ${isTrue}`)
Run Code Online (Sandbox Code Playgroud)

更新了我的做法:

const isTrue = true;
const name = 'Matt'
db.any('SELECT * FROM users WHERE active = $1 AND name = $2', [isTrue, name])
Run Code Online (Sandbox Code Playgroud)

或者

const isTrue = true;
const name = 'Matt'
db.any(`SELECT * FROM users WHERE active = $/isTrue/ AND name = $/name/`, {isTrue, name})

Run Code Online (Sandbox Code Playgroud)

postgresql pg-promise

2
推荐指数
1
解决办法
1882
查看次数