从版本^ 3.0.0开始,我很难删除身份验证状态更改侦听器.
要根据文档启动监听器:
firebase.auth().onAuthStateChanged(function (user) {
// handle it
});
Run Code Online (Sandbox Code Playgroud)
但是,我在文档中找不到任何引用删除身份验证状态更改侦听器的内容.Firebase.Auth类有一个特殊的功能叫做removeAuthTokenListener.不幸的是,它没有记录(firebase文档参考).
通过浏览器的Web控制台.
var auth = firebase.auth();
auth.removeAuthTokenListener;
Run Code Online (Sandbox Code Playgroud)
打印一个带有一个参数的函数定义.我试着做以下事情:
this.authListener = firebase.auth().onAuthStateChanged(function (user) {...});
firebase.auth().removeAuthTokenListener(this.authListener);
Run Code Online (Sandbox Code Playgroud)
但那没有做任何事情.
我有一个问题让firebase 3.0.1工作.我觉得这与我的webpack设置有关.我的文件在下面.当使用webpack dev服务器运行我的应用程序时,我收到错误:
未捕获的TypeError:firebase.initializeApp不是函数
有趣的是,如果我debugger;在var firebase = require('firebase');它之后放一个或断点似乎是一个空对象.
webpack.config.js
const webpack = require("webpack");
module.exports = {
entry: './src/index.js',
output: {
path: 'public',
filename: 'bundle.js'
},
module: {
loaders: [{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader?presets[]=es2015&presets[]=react'
}]
},
plugins: process.env.NODE_ENV === 'production' ? [
new webpack.optimize.DedupePlugin(),
new webpack.optimize.OccurrenceOrderPlugin(),
new webpack.optimize.UglifyJsPlugin()
] : []
};
Run Code Online (Sandbox Code Playgroud)
的package.json
{
"name": "burn",
"version": "1.0.0",
"description": "burn messaging",
"main": "index.js",
"scripts": {
"start": "if-env NODE_ENV=production && npm run start:prod || npm run …Run Code Online (Sandbox Code Playgroud) 我的SPA React/Firebase应用程序上的硬刷新在立即执行功能时不会保持身份验证状态.我有一个解决方法,但它是粗略的.
我的反应路由利用该onEnter功能来确定用户是否经过身份验证.例如
<Route path="/secure" component={Dashboard} onEnter={requireAuth}/>
Run Code Online (Sandbox Code Playgroud)
此外,我的requireAuth功能看起来像这样:
function (nextState, replace) {
console.log('requireAuth', firebase.auth().currentUser);
if (!firebase.auth().currentUser) {
console.log('attempting to access a secure route. please login first.');
replace({
pathname: '/login',
state: { nextPathname: nextState.location.pathname }
});
}
};
Run Code Online (Sandbox Code Playgroud)
但是,在硬刷新时会有轻微的延迟firebase.auth().currentUser.它首先为null,然后执行a POST到firebase服务器以确定身份验证状态.当它返回时,currentUser对象被填充.但这种延迟会引发问题.
我的hacky解决方案如下:更新:这实际上不起作用......
function (nextState, replace) {
setTimeout(function () {
console.log('requireAuth', firebase.auth().currentUser);
if (!firebase.auth().currentUser) {
console.log('attempting to access a secure route. please login first.');
replace({
pathname: '/login',
state: { nextPathname: nextState.location.pathname } …Run Code Online (Sandbox Code Playgroud) 我是新手来讨论开发,并且当你有一个导航抽屉时,在iOS中发现它有点令人沮丧,当你滑动打开它时,它会执行一个Navigation.of(context).pop().我想在iOS中禁用这种"轻扫到弹出"行为.我一直在阅读文档,但没有太多运气.
我确实看到了一些被称为WillPopScope诀窍的东西(这里有github问题),但我不能100%确定这是否是"正确"的方法(看起来太复杂了......)应该更容易......就像根应用程序上的设置一样).
我最近将https://github.com/chemerisuk/cordova-plugin-firebase-messaging添加到我的cordova项目中,该项目具有框架依赖性
<framework src="Firebase/Core" type="podspec" spec="~> 5.0"/>
<framework src="Firebase/Messaging" type="podspec" spec="~> 5.2"/>
Run Code Online (Sandbox Code Playgroud)
我最初在Android上测试代码和一切,它就像一个魅力.
但是,在我努力在iOS上测试我的更改时,我在运行cordova run android或任何其他构建命令时很快遇到了一些问题.他们倾向于失败,错误暗指CocoaPods Linking问题.如:
platforms/ios/Pods/FirebaseCore/Firebase/Core/FIRNetwork.m:23:9:
fatal error: 'GoogleToolboxForMac/GTMNSData+zlib.h' file not found
#import <GoogleToolboxForMac/GTMNSData+zlib.h>
Run Code Online (Sandbox Code Playgroud)
我找到了各种SO帖子,提到修复搜索路径或修改.m文件以引用相对路径(这是一个可怕的想法和太多的工作).
但这是问题所在,我知道这个项目是正确的.如果我打开我的.xcworkspace并从XCode运行它就可以完美运行!它仅在从命令行运行时出现问题.
Installed platforms:
android 7.1.0
ios 4.5.5
$ cordova -version
8.0.0
Xcode 9.4.1
Build version 9F2000
$ pod --version
1.5.3
Run Code Online (Sandbox Code Playgroud)
我完全不知所措.任何帮助将不胜感激!
我的Podfile以防万一
# DO NOT MODIFY -- auto-generated by Apache Cordova
platform :ios, '8.0'
target 'VeociSTAGE' do
project 'VeociSTAGE.xcodeproj'
pod 'Firebase/Core', '~> 5.0'
pod 'Firebase/Messaging', '~> 5.2'
pod 'GoogleToolboxForMac', '~> …Run Code Online (Sandbox Code Playgroud) 正如标题所说,我正在寻找一个关于 DSL 流中的 errorHandling 的好例子。具体来说,我希望处理来自服务激活器的错误。
例子:
IntegrationFlows.from(Amqp.inboundAdapter(simpleMessageListenerContainer()))
.transform(new JsonToObjectTransformer(AlbumDescriptor.class))
.handle(AlbumDescriptor.class, (p,h) -> transformXml(p))
.transform(new ObjectToJsonTransformer())
.handle(Amqp.outboundAdapter(rabbitTemplate).routingKey("xml-transformed"))
.get();
Run Code Online (Sandbox Code Playgroud)
如果我的函数transformXml(p)抛出异常,我如何使它转到特定的 errorChannel。
如果没有抛出异常,一切都会按照我想要的方式工作。
目前,如果从此函数抛出异常,我会收到以下异常:
2014-09-17 15:26:28.566 WARN 16339 --- [cTaskExecutor-1] s.a.r.l.ConditionalRejectingErrorHandler : Execution of Rabbit message listener failed.
org.springframework.amqp.rabbit.listener.ListenerExecutionFailedException: Listener threw exception
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.wrapToListenerExecutionFailedExceptionIfNeeded(AbstractMessageListenerContainer.java:758)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:653)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:576)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$001(SimpleMessageListenerContainer.java:78)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$1.invokeListener(SimpleMessageListenerContainer.java:161)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.invokeListener(SimpleMessageListenerContainer.java:1177)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:559)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:950)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:934)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$600(SimpleMessageListenerContainer.java:78)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1045)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.messaging.MessageHandlingException: java.lang.reflect.InvocationTargetException
at org.springframework.integration.dsl.LambdaMessageProcessor.processMessage(LambdaMessageProcessor.java:125)
at org.springframework.integration.handler.ServiceActivatingHandler.handleRequestMessage(ServiceActivatingHandler.java:71)
at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:170)
at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:78)
at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116)
at …Run Code Online (Sandbox Code Playgroud) 按照应用栏"页面过滤器"的概念,我想把它DropdownButton作为标题AppBar.我试过了,但看起来并不好.
https://material.io/guidelines/layout/structure.html#structure-app-bar
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String _value = 'one';
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new DropdownButton<String>(
value: _value,
items: <DropdownMenuItem<String>>[
new DropdownMenuItem(
child: new Text('one'),
value: 'one',
),
new DropdownMenuItem(
child: new Text('two'),
value: 'two'
),
],
onChanged: (String value) …Run Code Online (Sandbox Code Playgroud) 我有一个返回对象列表的API ...
[{}, {}, {}, ...]
Run Code Online (Sandbox Code Playgroud)
我已经为每个对象都有一个已定义且可以正常工作的build_value模型。但是,现在我需要对列表进行反序列化。
我目前正在尝试这样的事情:
List<Map<String, dynamic>> json = JSON.decode(DEMO_TASK);
json.expand<Task>((Map<String, dynamic> map) => _serializers.deserializeWith<Task>(Task.serializer, map));
Run Code Online (Sandbox Code Playgroud)
但是,这会导致问题,因为它说_serializers.deserializeWith返回类型Task不是Iterable<Task>闭包定义的类型。
我要如何反序列化列表。我确定我缺少一些超级基础的东西。
firebase ×3
flutter ×3
ios ×2
cocoapods ×1
cordova ×1
dart ×1
javascript ×1
npm ×1
react-router ×1
reactjs ×1
spring ×1
spring-dsl ×1
webpack ×1
xcode ×1