使用身份验证规则设置的FiRestore PHP SDK [英] Firestore PHP SDK using Auth Rule setup
本文介绍了使用身份验证规则设置的FiRestore PHP SDK的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我是Firebase的新手,现在我想尝试FiRestore php SDK并实现Firestore身份验证规则。下面的当前代码运行正常
use GoogleCloudFirestoreFirestoreClient;
$db = new FirestoreClient();
$db->collection('mycollectionname')
->document('mydocumentname')
->set(['name'=>'aaa','value'=>'111');
FiRestore身份验证规则
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
// before change
allow read, write: if true;
// after change
allow read, write: if request.auth.uid != null;
}
}
}
将true更改为quest.auth.uid!=NULL后,返回错误:
{ "error": { "code": 403, "message": "Missing or insufficient permissions.", "status": "PERMISSION_DENIED" } }
我可以想办法获取用户数据:电子邮件和密码或用户ID令牌,如何使用用户数据解决上述错误?
推荐答案
我刚找到它,可能对任何人都有用。
在文件use GoogleCloudFirestoreConnectionGrpc
我做了一些更改:
......
......
private function addRequestHeaders(array $args)
{
$args += [
'headers' => []
];
$args['headers']['google-cloud-resource-prefix'] = [$this->resourcePrefixHeader];
///////// CODE THAT I ADD ///////////
if(session('user_token'))
{
$args['headers']['Authorization'] = ['Bearer '.session('user_token')];
}
///////// CODE THAT I ADD ///////////
// Provide authentication header for requests when emulator is enabled.
if ($this->isUsingEmulator) {
$args['headers']['Authorization'] = ['Bearer owner'];
}
return $args;
}
使用laravel检查会话,在头上添加一个承载令牌。在使用上面的示例之后,我在使用FiRestore函数之前添加了一个会话
use GoogleCloudFirestoreFirestoreClient;
/// adding session
session(['user_token'=>'eyJhbGciOiJSUzI1................']);
$db = new FirestoreClient();
$db->collection('users')
->document('test@gmail.com')
->set(['name'=>'aaa','value'=>'111');
在auth规则中,我还可以根据用户的电子邮件名称制定文档规则,其中可以使用之前添加的令牌ID来获取用户的电子邮件。示例:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{email} {
allow read, write: if email == request.auth.token.email;
}
}
}
这篇关于使用身份验证规则设置的FiRestore PHP SDK的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文