我想在我的网站上有一个登录按钮,这样当用户点击它时,用户就可以使用他们的 Google 凭据。我想理想地使用 Express.js 和 Passport.js 执行身份验证服务器端。
我在服务器端实现了身份验证,但问题是我无法从网站向服务器发出 AJAX 请求以启动身份验证,因为Google 或 Oauth 不支持 CORS。所以我需要a href在我的网站中使用元素来调用服务器身份验证端点。但是,我无法以这种方式捕获服务器响应。
如果我在客户端执行身份验证(我使用的是 React),我可以在 Redux 中存储登录状态并允许用户访问网站的资源。但是,当用户注销时,我需要确保服务器端点停止为同一用户提供服务,这感觉就像实现了两次身份验证:客户端和服务器端。
此外,在对客户端进行身份验证时,Google 会打开一个弹出窗口供用户进行身份验证,我认为这比对服务器端进行身份验证时的重定向更糟糕。
我想知道使用 Oauth2/Google 进行身份验证的最佳实践是什么。例如,stackoverflow.com 也有 Google 按钮,但只是进行重定向,没有任何弹出窗口,所以我猜他们想出了一种执行服务器端身份验证和绕过 CORS 问题的方法。
我想使用所有主要移动浏览器都支持的事件来检测屏幕方向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) 我有以下结构:
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?
我想构建一个将运行我的 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) 我为 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.MyArtifactApplication或mvn exec:exec …
我想知道在使用 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) 一位工作同事建议初始化一个结构{'\0'}而不是{0}因为他解释说这0被认为int至少是4个字节.因此,如果结构不是初始化结构的4的倍数0可能会留下一些未初始化的字节,0而因为它\0是一个大小为1字节的ASCII字符,它会将结构初始化为零,而不管其大小如何.
话虽这么说,我几乎从未见过初始化使用,{'\0'}而我确实看到很多初始化使用{0}.
我的问题是初始化一个结构{0}是否足够?这是否足够,因为大多数编译器会自动用零填充不是4的倍数的字节,还是因为C做到了?
在我的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) 我有以下功能:
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而不是传递简单的标记文字作为查询。
根据 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
reactjs ×4
c ×2
java ×2
javascript ×2
node.js ×2
spring-boot ×2
struct ×2
client-side ×1
docker ×1
dom-events ×1
dotenv ×1
express ×1
graphql ×1
graphql-js ×1
maven ×1
next.js ×1
npm-install ×1
null ×1
oauth-2.0 ×1
passport.js ×1
react-hooks ×1
server-side ×1
setinterval ×1
settimeout ×1
tomcat ×1
use-effect ×1