小编Eig*_*ice的帖子

如何在 Flutter Web 中捕获 OAuth2 令牌?

此依赖项据称支持 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)

并将单独的路由设置为回调 …

oauth-2.0 dart flutter flutter-dependencies flutter-web

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

布局周围的边框

我想在 VerticalLayout 周围画一个边框(轮廓)。我不希望我的所有 VerticalLayout 组件都有边框,只有其中一个。这是 Eclipse 中的 Vaadin 7 项目。

border vaadin7

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

检查 msg.sender 是否是特定类型的合约

现在,任何人都可以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)

ethereum solidity smartcontracts web3js

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

无法使用 Riverpod 观看对象实例

在 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 之前

任何建议都会受到重视。

dart flutter flutter-web riverpod

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

从云函数内的请求主体访问各个字段

我正在向云函数发送一个发布请求,其中包含以下正文:

{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)

node.js firebase google-cloud-functions

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

如何在Flutter应用程序中正确设置redirect_uri?

我正在尝试从我的 Flutter 应用程序将用户登录到 Google API,但无法让它自动获取令牌。我得到的最接近的是在身份验证屏幕中看到令牌字符串,并被要求将其复制/粘贴回应用程序中。我怀疑这与redirect_uri参数有关。

我尝试使用oauth2_clientflutter_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)

android google-oauth flutter

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

在独立于 UI 的 Vaadin 8 应用程序中运行代码

在早期版本中,您可以有一个实现 ServletContextListener 的类,并将您的代码放在 contextInitialized 方法中,以便它在服务器启动时运行。这对于将数据库加载到内存中很有用。如何在 Vaadin 8 项目中实现这一目标?

vaadin vaadin8

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

Vaadin 8 应用程序中的后台进程

在我在 Tomcat 上运行的 Vaadin 8 应用程序中,应该有一个用于刷新和更新数据库的后台进程。如果我使用 ServletContextListener 将它与主 UI 分开,Tomcat 将不会完成启动,直到它完成执行 contextInitialized 中的所有指令,并且因为我想将它保持在调用数据库的单独线程上的无限循环中,然后睡眠 5 分钟,该应用程序从未真正启动。实现这一点的正确方法是什么?

tomcat vaadin vaadin8

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

如果集合名称匹配,Firestore 允许读取

我正在尝试在 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。帮助?

firebase firebase-security google-cloud-firestore

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