此依赖项据称支持 Web,但缺少侦听回调和检索令牌的实现。在过去三天中仔细研究之后,一些人建议它可以使用 dart:html 库以及 onMessage 和 postMessage 函数来工作。
这是我的设置:
import 'dart:html' as html;
import 'package:http/http.dart' as http;
import 'package:flutter/material.dart';
import 'package:oauth2/oauth2.dart' as oauth2;
import 'package:url_launcher/url_launcher.dart';
class AuthYoutube {
var httpClient = http.Client();
Future<oauth2.Client> getClient() async {
var grant = new oauth2.AuthorizationCodeGrant(
CLIENT_ID, AUTH_DOMAIN, AUTH_TOKEN,
secret: secret);
var authorizationUrl =
grant.getAuthorizationUrl(REDIRECT_URI, scopes: scopes);
html.window.open(authorizationUrl.toString(), "open");
Completer<LinkedHashMap<dynamic, dynamic>> completer = Completer();
html.window.onMessage.listen((event) async {
completer.complete(event.data as LinkedHashMap<dynamic, dynamic>);
});
Uri responseUri;
completer.future.then((value) {
responseUri = Uri.parse(value.toString());
return grant.handleAuthorizationResponse(responseUri.queryParameters);
});
}
Run Code Online (Sandbox Code Playgroud)
并将单独的路由设置为回调 …
我想在 VerticalLayout 周围画一个边框(轮廓)。我不希望我的所有 VerticalLayout 组件都有边框,只有其中一个。这是 Eclipse 中的 Vaadin 7 项目。
现在,任何人都可以setMyString调用FirstContract. 我试图将对该函数的访问限制为SecondContract. 但不是一个特定的实例,任何类型的合约都SecondContract应该能够调用setMyString.
contract FirstContract{
String public myString;
function setMyString(String memory what) public {
myString=what;
}
}
contract SecondContract{
address owner;
address firstAddress;
FirstContract firstContract;
constructor(address _1st){
owner=msg.sender;
firstAddress=_1st;
firstContract=FirstContract(firstAddress);
}
function callFirst(String memory what){
require(msg.sender==owner);
firstContract.setMyString("hello");
}
}
Run Code Online (Sandbox Code Playgroud) 在 Flutter Web 项目中,我遇到了 Riverpod 的问题:
Consumer(
builder: (context, watch, child) {
final om=watch(human);
return Text(om.name); }
Run Code Online (Sandbox Code Playgroud)
“watch”带有下划线,编译器说:The expression doesn't evaluate to a function, so it can't be invoked.
快速修复建议是将 human 从括号中删除。当然,当我还有一些战斗力时,这不会发生。这是人类的定义:
final human=ChangeNotifierProvider((ref)=>Human());
class Human with ChangeNotifier{String name="tananana";}
Run Code Online (Sandbox Code Playgroud)
我无法告诉你我正在导入哪个版本的 Riverpod,因为我不得不在 pubspec.yaml 中未指定它,以便它可以解决与其他导入的冲突,但我使用的是通道主运行版本2.9.0-1.0.294 之前
任何建议都会受到重视。
我正在向云函数发送一个发布请求,其中包含以下正文:
{message: "this is the message"}
Run Code Online (Sandbox Code Playgroud)
如果我尝试打印请求的整个正文,它会显示它,但如果我尝试获取该message字段,我会进入undefined控制台。
这是我的功能:
exports.myCloudFunction = functions.https.onRequest((req: any, res: any) => {
console.log(req.body)\\prints the body of the request fine
console.log(req.body.message)\\prints "undefined"
cors(req, res, () => {
const pl = req.body.message;
console.log(pl);\\prints "undefined"
});
return res.send("all done")
});
Run Code Online (Sandbox Code Playgroud) 我正在尝试从我的 Flutter 应用程序将用户登录到 Google API,但无法让它自动获取令牌。我得到的最接近的是在身份验证屏幕中看到令牌字符串,并被要求将其复制/粘贴回应用程序中。我怀疑这与redirect_uri参数有关。
我尝试使用oauth2_client和flutter_appauth,结果几乎相同。设置客户端时,如果我使用 Google 提供的第一个 redirect_uri urn:ietf:wg:oauth:2.0:oob,在授予权限后,它会在身份验证屏幕中显示令牌,并指示用户复制它并将其粘贴回应用程序中。如果我使用在 AndroidManifest.xml 和 build.gradle 中设置的 uri,而不是同意屏幕,我会在浏览器中收到以下消息:
“redirect_url 的参数值无效:缺少方案:ai.autonet.afterme”
最后,如果我使用"http://localhost"(Google 提供的第二个 uri),我会收到“请求超时”。
我的 Google 客户端配置如下所示:
"client_id":"somethingsomething.apps.googleusercontent.com","project_id":"afterme-850af","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"]
Run Code Online (Sandbox Code Playgroud)
这是 flutter_appauth 实现的最简单版本:
main.dart
import 'package:flutter/material.dart';
import 'package:flutter_appauth/flutter_appauth.dart';
import 'package:oauth2_client/access_token_response.dart';
import 'package:http/http.dart' as http;
const AUTH_ENDIPOINT = 'https://accounts.google.com/o/oauth2/auth';
const CLIENT_ID =
'somethingsomething.apps.googleusercontent.com';
const REDIRECT_URI = 'ai.autonet.afterme';
const TOKEN_ENDPOINT = "https://oauth2.googleapis.com/token";
var scopes = [
"https://www.googleapis.com/auth/youtube",
"https://www.googleapis.com/auth/youtube.upload",
];
void main() {
runApp(MyApp());
}
var httpClient = http.Client();
class MyApp extends …Run Code Online (Sandbox Code Playgroud) 在早期版本中,您可以有一个实现 ServletContextListener 的类,并将您的代码放在 contextInitialized 方法中,以便它在服务器启动时运行。这对于将数据库加载到内存中很有用。如何在 Vaadin 8 项目中实现这一目标?
在我在 Tomcat 上运行的 Vaadin 8 应用程序中,应该有一个用于刷新和更新数据库的后台进程。如果我使用 ServletContextListener 将它与主 UI 分开,Tomcat 将不会完成启动,直到它完成执行 contextInitialized 中的所有指令,并且因为我想将它保持在调用数据库的单独线程上的无限循环中,然后睡眠 5 分钟,该应用程序从未真正启动。实现这一点的正确方法是什么?
我正在尝试在 Cloud Firestore 中实现我认为的基本安全规则,即允许对特定集合进行读取访问。
service cloud.firestore {
match /databases/{collectionName}/documents {
match /{document=**}{
allow read : if collectionName=="metadata";
}
}
}
Run Code Online (Sandbox Code Playgroud)
因此,在规则游乐场中, 的 查询/metadata/status被拒绝,但是,如果我将运算符切换为,!=而不是==,它允许对任何集合进行任何查询,而不仅仅是非 的查询metadata。帮助?