据我所知,Firebase通过HTTPS连接发送数据,因此数据已经被加密.虽然Firebase提供了保护我的数据结构的安全规则,但我仍然可以在数据库中看到字符串消息.
我只是好奇在将数据推送到Firebase之前加密消息是否是个好主意.我应该继续从这个话题转向别的吗?
谢谢.
encryption firebase firebase-security firebase-realtime-database
根据Firebase 文档,刷新令牌仅适用于需要显式刷新令牌的高级场景。
在什么情况下我应该使用该令牌,使用它有什么好处?
private afAuth: AngularFireAuth
this.afAuth.auth.currentUser.getIdToken()
.then(idToken => // Gives me a different token from key name called pa);
Run Code Online (Sandbox Code Playgroud)
另外,我不确定刷新令牌和返回的令牌之间的区别getIdToken()。目前,我使用后者来处理 HTTP 请求。
注意: getIdToken返回一个 JWT 令牌,用于向 Firebase 服务识别用户。
问题
当我单击模态中的文本输入时,键盘与文本输入重叠.在iPhone SE(iOS 11)设备上进行测试时发现此问题.
我查了几个帖子并试图自己弄清楚,但我已经意识到我目前的问题一直是Ionic开发人员的长期问题,直到现在.
这些是我的问题的相关链接.我已经尝试过以下链接给出的解决方案,但它们都没有使用我的代码.
版本信息
cli包:(/ usr/local/lib/node_modules)
@ionic/cli-utils : 1.19.0
ionic (Ionic CLI) : 3.19.0
Run Code Online (Sandbox Code Playgroud)
全球套餐:
cordova (Cordova CLI) : 7.1.0
Run Code Online (Sandbox Code Playgroud)
本地包裹:
@ionic/app-scripts : 3.1.4
Cordova Platforms : android 6.3.0 ios 4.5.4
Ionic Framework : ionic-angular 3.9.2
Run Code Online (Sandbox Code Playgroud)
系统:
ios-deploy : 1.9.2
Node : v8.9.0
npm : 5.5.1
OS : macOS High Sierra
Xcode : Xcode 9.2 Build version 9C40b
Run Code Online (Sandbox Code Playgroud)
预期的行为
当用户键入一些消息时,离子输入应保持在键盘正上方的位置.
实际行为
app.component.ts
我已经包含keyboard.disableScroll(true);内部platform.ready()以防止导航栏崩溃问题.没有这行代码,键盘可以正常输入文本.但是它将整个内容推送到顶部,包括导航栏,因此前几条消息似乎被隐藏了.
有任何想法吗?
更新
我不确定我解决问题的方法是最好的解决方案,但是现在,我用文本区域的初始高度和键盘高度之和替换了内容和页脚的边距底部.
如果您有更好的解决方案,请随意留下答案. …
我有两个服务,都是@Injectable。ServiceA 通过 Providers 数组提供给组件,并且在任何地方都能很好地工作。ServiceB 是一个单例,位于其模块的 Providers 数组中,在任何地方都能很好地工作。ServiceA 需要保持不是单例,ServiceB 需要保持单例。
我的问题是现在我需要从 ServiceB 访问 ServiceA,但不知道如何访问它。似乎我无法将非单例服务注入单例。
我遇到的一切都告诉我将服务放在引导程序或模块声明中,但正如我所提到的,我不能这样做,因为我需要 ServiceA 作为非单例行为。
// module setup
... providers: [ServiceB]
// non-singleton
@Injectable()
export class ServiceA
// singleton
@Injectable()
export class ServiceB {
constructor(ServiceA) // <-- this is the problem area, need to get ServiceA here
Run Code Online (Sandbox Code Playgroud)
我曾尝试做类似构造函数(Inject(ServiceA) serviceA) 的事情,但似乎遇到了同样的错误
错误:DI 错误 ServiceA 没有提供程序!
问:(ionInput)和之间有什么区别(ionChange)?在哪种情况下,我应该选择其中一个?
我已经尝试了如下所示的两个代码,并且给出了与预期相同的结果。
使用ionInput事件的示例代码
<ion-searchbar type="text" maxlength="18" placeholder="Search" debounce="0"
[(ngModel)]="usernameText" (ionInput)="findUserWithUsername()"></ion-searchbar>
Run Code Online (Sandbox Code Playgroud)
使用ionChange事件的示例代码
<ion-input type="text" maxlength="18" placeholder="Search" clearInput
[(ngModel)]="usernameText" (ionChange)="findUserWithUsername()"></ion-input>
Run Code Online (Sandbox Code Playgroud) 我试图用displayName创建一个用户。如果我在创建后更新用户个人资料,它实际上可以工作。但是我还需要一个displayName的地方使用了一个云函数auth.onCreate。但是event.data没有给我displayName。我猜这是因为触发云功能时,配置文件没有更新。知道如何在我的云函数中访问displayName吗?
我尝试执行此操作的原因是因为我想确保displayNames是唯一的。因此,当人们注册时,他们必须留下用户名。如果它已经存在于我的数据库中,则必须另选一个。
如何使用JavaScript创建用户:
firebase.auth().createUserWithEmailAndPassword(this.email, this.password).then(
(user) => {
user.updateProfile({
displayName: username
}).then(() => {
user.sendEmailVerification().then(
() => {
firebase.auth().signOut()
this.complete = true
}).catch(function(err) {
console.log(err.message)
})
})
}
)
Run Code Online (Sandbox Code Playgroud)
我的云功能:
exports.createUser = functions.auth.user().onCreate(event => {
let user = event.data;
var userObject = {
displayName: user.displayName, // undefined
wins: 0
}
admin.database().ref('/users/' + user.uid).set(userObject).then(() => {
return true
})
});
Run Code Online (Sandbox Code Playgroud) javascript firebase firebase-authentication google-cloud-functions
自从我使用Ionic Framework(最新的ionic-angular 3.9.2)构建渐进式Web应用程序已经过去了几个月。在此期间,我一直想知道的区别ngOnInit和ionViewWillLoad。
如果我没看错,我相信这ngOnInit是一个Angular生命周期挂钩,它会初始化指令和组件。(设置指令/组件的输入属性。)
ionViewWillLoad是Ionic导航生命周期事件,它似乎在ionViewDidLoad (所有内容均已加载)事件触发之前执行。看来ionViewWillLoad事件尚未添加到NavController,文档也尚未更新。
据我所知,JavaScript引擎会调用构造函数,因此应避免将其用于复杂的初始化。(详细信息:为什么应避免使用复杂的构造函数逻辑)
因此,我习惯ionViewWillLoad在Ionic设置输入属性之后设置组件。
我不确定为什么,但是这ionViewWillLoad是唯一没有任何错误发生的事件。
export class UsernamePage {
usernameControl: FormControl;
constructor(private userService: UserServiceProvider){ }
// No errors
ionViewWillLoad() { this.createUsernameForm(); }
// Errors
ionViewWillEnter() { this.createUsernameForm(); }
ionViewDidEnter() { this.createUsernameForm(); }
ionViewDidLoad() { this.createUsernameForm(); }
createUsernameForm() {
this.usernameControl = new FormControl('',
{
validators: [Validators.required, Validators.minLength(4)],
asyncValidators: CustomValidator.username(this.userService)
});
} …Run Code Online (Sandbox Code Playgroud) 我想创建一个自定义异常过滤器来处理不同类型的 TypeORM 错误。我查了TypeORM 错误类,似乎 TypeORM 中没有像MongoError这样的东西。
我想做一些类似于1FpGLLjZSZMx6k's answer的东西,这是我到目前为止所做的。
import { QueryFailedError } from 'typeorm';
@Catch(QueryFailedError)
export class QueryFailedExceptionFilter implements ExceptionFilter {
catch(exception: QueryFailedError, host: ArgumentsHost) {
const context = host.switchToHttp();
const response = context.getResponse<Response>();
const request = context.getRequest<Request>();
const { url } = request;
const { name } = exception;
const errorResponse = {
path: url,
timestamp: new Date().toISOString(),
message: name,
};
response.status(HttpStatus.BAD_REQUEST).json(errorResponse);
}
}
Run Code Online (Sandbox Code Playgroud)
例如,如果我需要捕获另一个错误EntityNotFoundError,我必须编写相同的代码,这是一项非常繁琐的任务。
如果我可以通过如下所示的单个过滤器处理错误,那就太好了。有任何想法吗?
@Catch(TypeORMError)
export class …Run Code Online (Sandbox Code Playgroud) ??? .github
? ??? workflows
? ??? cd.yml
? ??? ci.yml
??? scripts
? ??? createDevEBAppVersion.sh
? ??? createProdEBAppVersion.sh
??? src
Run Code Online (Sandbox Code Playgroud)
Github Actions 抛出以下错误:
/home/runner/work/_temp/9c99fa0d-20da-49ed-a0af-322f274c13ac.sh:第1行:[refs/heads/develop:没有这样的文件或目录
/home/runner/work/_temp/9c99fa0d-20da-49ed-a0af-322f274c13ac.sh: line 5: [[refs/heads/develop: No such file or directory
??? .github
? ??? workflows
? ??? cd.yml
? ??? ci.yml
??? scripts
? ??? createDevEBAppVersion.sh
? ??? createProdEBAppVersion.sh
??? src
Run Code Online (Sandbox Code Playgroud)
我试过没有working-directory,但没有奏效。
name: CD
env:
PACKAGE_NAME : "app_${GITHUB_SHA::8}.zip"
ARTIFACT_ROOT : "${GITHUB_REF#refs/*/}"
APPLICATION_NAME : "example-app-name"
AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY }}
AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_KEY }} …Run Code Online (Sandbox Code Playgroud) 遵循以下有关通过Cordova使用OAuth Provider进行身份验证的说明,在我的离子应用程序构建中遇到上述错误。
在网络上进行搜索后,我最终获得了以下repo ionic-plugin-deeplinks。
似乎不再被维护。还有其他人有这个问题吗?有什么办法吗?
ionic info cli软件包:(/ usr / local / lib / node_modules)
@ionic/cli-utils : 1.19.0
ionic (Ionic CLI) : 3.19.0
Run Code Online (Sandbox Code Playgroud)
全局软件包:
cordova (Cordova CLI) : 7.1.0
Run Code Online (Sandbox Code Playgroud)
本地套餐:
@ionic/app-scripts : 3.1.2
Cordova Platforms : ios 4.5.4
Ionic Framework : ionic-angular 3.9.2
Run Code Online (Sandbox Code Playgroud)
系统:
ios-deploy : 1.9.2
Node : v8.9.1
npm : 5.5.1
OS : macOS Sierra
Xcode : Xcode 9.2 Build version 9C40b
Run Code Online (Sandbox Code Playgroud) 所有推送到develop分支的提交都表明它们已经过验证。
为了合并从develop到的所有内容master,我决定单击一个按钮Rebase and merge。(我不想为 master 创建另一个新提交。)
令人惊讶的是,合并成功后,所有经过验证的签名都从 master 上消失了。