小编hit*_*ker的帖子

使用 Oauth2、React、Node.js 和 Passport.js 通过 Google 登录按钮对用户进行身份验证的最佳实践是什么?

我想在我的网站上有一个登录按钮,这样当用户点击它时,用户就可以使用他们的 Google 凭据。我想理想地使用 Express.js 和 Passport.js 执行身份验证服务器端。

我在服务器端实现了身份验证,但问题是我无法从网站向服务器发出 AJAX 请求以启动身份验证,因为Google 或 Oauth 不支持 CORS。所以我需要a href在我的网站中使用元素来调用服务器身份验证端点。但是,我无法以这种方式捕获服务器响应。

如果我在客户端执行身份验证(我使用的是 React),我可以在 Redux 中存储登录状态并允许用户访问网站的资源。但是,当用户注销时,我需要确保服务器端点停止为同一用户提供服务,这感觉就像实现了两次身份验证:客户端和服务器端。

此外,在对客户端进行身份验证时,Google 会打开一个弹出窗口供用户进行身份验证,我认为这比对服务器端进行身份验证时的重定向更糟糕。

我想知道使用 Oauth2/Google 进行身份验证的最佳实践是什么。例如,stackoverflow.com 也有 Google 按钮,但只是进行重定向,没有任何弹出窗口,所以我猜他们想出了一种执行服务器端身份验证和绕过 CORS 问题的方法。

authentication oauth-2.0 express reactjs passport.js

15
推荐指数
2
解决办法
2万
查看次数

使用react js和orientationchange事件时如何检测移动网站的屏幕方向?

我想使用所有主要移动浏览器都支持的事件来检测屏幕方向orientationchange变化

我添加事件侦听器componentDidMount并从事件回调内部设置状态。

但是,我发现当事件由于从纵向更改为横向而首次触发时,状态不会更新为横向。然后,当我将方向从横向更改回纵向时,状态显示方向是横向。此后,每次我更改方向时,状态总是与实际方向相反。我不确定我是否应该使用某种生命周期反应方法,或者我的检测效果不好。

我使用 Chrome 开发者工具测试了代码Toggle device toolbar。这是我的代码:

import React from 'react';

class AppInfo extends React.Component {
  state = {
    screenOrientation: 'portrait'
  }

  isPortraitMode = () => {
    console.log(this.state);
    const { screenOrientation } = this.state;
    return screenOrientation === 'portrait';
  }

  setScreenOrientation = () => {
    if (window.matchMedia("(orientation: portrait)").matches) {
      console.log('orientation: portrait');
      this.setState({
        screenOrientation: 'portrait'
      });
    }

    if (window.matchMedia("(orientation: landscape)").matches) {
      console.log('orientation: landscape');
      this.setState({
        screenOrientation: 'landscape'
      });
    }
  }

  componentDidMount() {
    window.addEventListener('orientationchange', this.setScreenOrientation); …
Run Code Online (Sandbox Code Playgroud)

javascript dom-events reactjs

9
推荐指数
2
解决办法
2万
查看次数

为什么C中的NULL不能比较结构?

我有以下结构:

typedef struct School
{
    int numOfStudents;
} School;
Run Code Online (Sandbox Code Playgroud)

例如,如果我有一个结构:

School s;
Run Code Online (Sandbox Code Playgroud)

我想检查结构是否为null,如下所示:

if(s) {
    printf("null");
}
Run Code Online (Sandbox Code Playgroud)

这将无法编译,错误消息如下:

error: used struct type value where scalar is required

为什么我不能在C中的if语句中检查结构为NULL?

c null struct

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

为什么 dotenv 没有加载到 docker 中,但在主机中运行良好?

我想构建一个将运行我的 node.js 应用程序的 Docker 映像。我正在使用dotenv npm 包来存储环境变量。它.env位于项目的根目录中。npm run start_in_docker当我运行从主机启动应用程序()的 npm 脚本时,一切都运行良好。但是,当我运行 Docker 容器时,出现以下错误:

internal/modules/cjs/loader.js:584
    throw err;
    ^

Error: Cannot find module 'dotenv'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:582:15)
    at Function.Module._load (internal/modules/cjs/loader.js:508:25)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)
    at Object.<anonymous> (/usr/src/app/src/server/main.js:3:1)
    at Module._compile (internal/modules/cjs/loader.js:701:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at Module.load (internal/modules/cjs/loader.js:600:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
    at Function.Module._load (internal/modules/cjs/loader.js:531:3) 
Run Code Online (Sandbox Code Playgroud)

这是我的 Dockerfile:

FROM node:10-alpine

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json …
Run Code Online (Sandbox Code Playgroud)

environment-variables node.js docker npm-install dotenv

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

如何解决使用 spring boot 无法找到或加载主类错误?

我为 Spring Boot 创建了一个 Maven 项目。我有很多 Spring 依赖项和一个主类:

package com.vastserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyArtifactApplication {

    public static void main(String[] args) {

//      SpringApplication.run(MyArtifactApplication.class, args);
        System.out.println("hello!");
    }

}
Run Code Online (Sandbox Code Playgroud)

src目录的文件夹结构为:

.
??? main
    ??? java
    ?   ??? com
    ?       ??? vastserver
    ?           ??? MyArtifactApplication.java
    ??? resources
        ??? application.properties
Run Code Online (Sandbox Code Playgroud)

在我的 pom.xml 中,我用于maven-assembly-plugin在独立的 .jar 文件中构建我的项目。即使我三次检查目录结构和主类文件在 pom.xml 中是否正确显示,我仍然收到错误:Error: Could not find or load main class com.vastserver.MyArtifactApplication当我运行时mvn package然后java -cp target/vast-ad-server-artifactId-1.0-SNAPSHOT-jar-with-dependencies.jar com.vastserver.MyArtifactApplicationmvn exec:exec …

java maven spring-boot

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

清除超时/间隔是否必须在 `useEffect` 反应钩子内?

我想知道在使用 React 钩子时清除超时/间隔的正确方法和最佳实践是什么。例如,我有以下代码:

import React, { useState, useEffect, useRef } from 'react';

const Test = () => {
  const id = useRef(null)
  const [count, setCount] = useState(5)
  const [timesClicked, setTimesClicked] = useState(0)

  if (!count) {
    clearInterval(id.current)
  }

  useEffect(() => {
    id.current = setInterval(() => {
      setCount(count => count -1)
    }, 1000)

    return () => {
      clearInterval(id.current)
    }
  }, [])

  const onClick = () => setTimesClicked(timesClicked => timesClicked + 1)

  return (
    <div>countdown: {count >= 0 ? count : 0}
      <hr …
Run Code Online (Sandbox Code Playgroud)

settimeout setinterval reactjs react-hooks use-effect

4
推荐指数
1
解决办法
633
查看次数

初始化结构与{0}或{'\ 0'}之间有什么区别吗?

一位工作同事建议初始化一个结构{'\0'}而不是{0}因为他解释说这0被认为int至少是4个字节.因此,如果结构不是初始化结构的4的倍数0可能会留下一些未初始化的字节,0而因为它\0是一个大小为1字节的ASCII字符,它会将结构初始化为零,而不管其大小如何.

话虽这么说,我几乎从未见过初始化使用,{'\0'}而我确实看到很多初始化使用{0}.

我的问题是初始化一个结构{0}是否足够?这是否足够,因为大多数编译器会自动用零填充不是4的倍数的字节,还是因为C做到了?

c struct initialization

3
推荐指数
1
解决办法
75
查看次数

在达到某些请求阈值之前,Spring Boot中的单线程是否会处理多个请求?

在我的Spring Boot 2.1.6项目(基于Tomcat)中,我有一个rest控制器。我向它添加了一个默认的构造函数,它可以打印一些内容。我认为在基于Tomcat的服务器中,每个请求都在单独的线程中处理。因此,我希望每个请求都触发一个新的控制器对象,并因此构造函数产生新的打印结果。但是,我进行了一次测试,向剩余的控制器发送了30个请求,但我只看到打印一次。据我了解,其余控制器在一个线程中处理所有这些请求。

我的问题是,是否确实在一个线程中处理了多个请求,或者是否存在打开另一个线程的特定请求阈值?我正在使用默认的Spring Boot配置,也许这​​是在配置中的某个地方控制的?

这是我的控制器的代码:

@RestController
public class TrackingEventController {

    public TrackingEventController() {
        System.out.println("from TrackingEventController");
    }

    @RequestMapping(method=GET, path=trackingEventPath)
    public ResponseEntity<Object> handleTrackingEvent(
            @RequestParam(name = Routes.event) String event,
            @RequestParam(name = Routes.pubId) String pubId,
            @RequestParam(name = Routes.advId) String advId) {

        return new ResponseEntity<>(null, new HttpHeaders(), HttpStatus.OK);
    }
}
Run Code Online (Sandbox Code Playgroud)

java tomcat spring-boot

3
推荐指数
1
解决办法
142
查看次数

如何从node.js函数将变量传递到graphql-tag?

我有以下功能:

import ApolloClient from 'apollo-boost'
import gql from 'graphql-tag'
import fetch from 'node-fetch'
global.fetch = fetch

const client = new ApolloClient({
    uri: 'myUri'
  })
const getPostsByCategory = async category => {
    const res = await client.query({
        query: gql`
          query articlesByCategory($id: String!) {
            postsByCategory(id: $id) {
              id
            }
          }
        `
      })
      console.log('res', res)
}
Run Code Online (Sandbox Code Playgroud)

我想调用该函数:

await getPostsByCategory('news')
Run Code Online (Sandbox Code Playgroud)

但是我只是不明白如何将类别变量传递到查询中。我想在查询中使用qraphql-tag而不是传递简单的标记文字作为查询。

javascript node.js graphql graphql-js

3
推荐指数
1
解决办法
3177
查看次数

在 next.js 的自定义 _app 组件中使用 `getInitialProps` 是否会禁用客户端渲染?

根据 next.js 官方文档

import React from 'react'
import App from 'next/app'

class MyApp extends App {
  // Only uncomment this method if you have blocking data requirements for
  // every single page in your application. This disables the ability to
  // perform automatic static optimization, causing every page in your app to
  // be server-side rendered.
  //
  // static async getInitialProps(appContext) {
  //   // calls page's `getInitialProps` and fills `appProps.pageProps`
  //   const appProps = await App.getInitialProps(appContext);
  //
  // …
Run Code Online (Sandbox Code Playgroud)

server-side client-side reactjs server-side-rendering next.js

3
推荐指数
1
解决办法
3254
查看次数