第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何通過 PHP 使用電子郵件和密碼登錄并獲取 JWT 令牌?

如何通過 PHP 使用電子郵件和密碼登錄并獲取 JWT 令牌?

PHP
忽然笑 2022-01-24 09:20:15
我不知道如何通過 PHP 對用戶進(jìn)行身份驗(yàn)證。文檔演示了通過 javascript 進(jìn)行的登錄,其中用戶電子郵件和密碼為純文本 ( ) firebase.auth().createUserWithEmailAndPassword(email, password),當(dāng)人們可以查看源代碼并獲取登錄信息時,我不確定這在安全性方面是如何工作的。我曾嘗試查找?guī)欤鐃his,但似乎沒有任何方法可以驗(yàn)證用戶以開始與數(shù)據(jù)庫交互。目前,安全規(guī)則如下(這是最低要求,允許任何登錄用戶讀/寫):rules_version = '2';service cloud.firestore {  match /databases/{database}/documents {    match /{document=**} {      allow read, write: if request.auth.uid != null;    }  }}我的問題是:1.我如何通過 PHP 驗(yàn)證用戶的電子郵件和密碼,然后獲得一個可以被 javascript 進(jìn)一步使用的令牌?2. 在我有足夠的權(quán)限與 Firestore 等工具進(jìn)行交互之前,F(xiàn)irebase 身份驗(yàn)證究竟是如何工作的? (據(jù)我所知,我假設(shè)它首先從服務(wù)器端登錄以獲取帶有詳細(xì)信息的令牌,然后 javascript 可以使用該令牌與 Firestore 安全交互,但我不確定這是否是預(yù)期的。 )3. 為什么使用 javascript 登錄(使用普通電子郵件和密碼)甚至是一件事?這不意味著每個人都可以看到所有憑據(jù)嗎?4. 對于像這樣與服務(wù)器交互的javascript庫,服務(wù)器(Firestore)如何防止作惡者通過控制臺修改數(shù)據(jù)?一旦他們登錄,他們可以簡單地從控制臺向服務(wù)器發(fā)送命令,因?yàn)樗皇撬械?javascript。我對么? (當(dāng)然,一旦你登錄了)
查看完整描述

1 回答

?
SMILET

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個贊

首先讓我先說 Firebase 并不意味著代表用戶從后端服務(wù)訪問(至少我是這樣認(rèn)為的)??蛻舳?SDK 用于在面向用戶的客戶端應(yīng)用程序中使用,服務(wù)器/管理 SDK 用于后臺和維護(hù)工作(如果 Firebase Cloud Functions 不夠用)。


如何使用來自 PHP 的電子郵件和密碼對用戶進(jìn)行身份驗(yàn)證,然后獲取可以被 javascript 進(jìn)一步使用的令牌?


“使用電子郵件和密碼登錄”功能目前在非官方 Firebase SDK for PHP中不可用(如果應(yīng)該的話,我會在腦海中反復(fù)思考??),但您可以使用自定義令牌來實(shí)現(xiàn):


<?php


use Kreait\Firebase\Factory;


$email = '...';

$password = '...';

$serviceAccount = '/path/to/service-account.json';


$factory = (new Factory())->withServiceAccount($serviceAccount);


$auth = $factory->createAuth();


$userRecord = $auth->verifyPassword($email, $password);

$customToken = $auth->createCustomToken($userRecord->uid);

然后,您可以將自定義令牌傳遞給您的 JavaScript 應(yīng)用程序并使用Auth.signInWithCustomToken()它。


在我擁有與 Firestore 等工具交互的足夠權(quán)限之前,F(xiàn)irebase 身份驗(yàn)證究竟是如何工作的?


在服務(wù)器端,服務(wù)帳戶用于對 Firebase API 的請求進(jìn)行身份驗(yàn)證。如果您按照官方文檔中的說明創(chuàng)建此類服務(wù)帳戶憑據(jù),則可以使用它來初始化服務(wù)器 SDK,并不受限制地訪問您的 Firebase。如果您隨后代表用戶執(zhí)行操作,您必須確保用戶之前已通過您的自定義應(yīng)用程序進(jìn)行了身份驗(yàn)證。


SDK 以及 Firestore 支持目前不提供“作為用戶”API 連接,但我正在努力。


在客戶端,客戶端 SDK 使用 API 密鑰進(jìn)行初始化(這不是秘密,您可以在例如啟用 Firebase 的 Web 應(yīng)用程序的 HTML 源代碼中找到它),但應(yīng)用程序根本無法與 Firebase 交互沒有任何形式的身份驗(yàn)證,至少是匿名身份驗(yàn)證。當(dāng)匿名身份驗(yàn)證時,不同類型的安全規(guī)則(存儲、實(shí)時數(shù)據(jù)庫、Firestore 等)的工作是確保匿名用戶不能與他們單獨(dú)的數(shù)據(jù)混淆。


為什么使用javascript進(jìn)行日志記錄(使用普通電子郵件和密碼)甚至是一件事?這不意味著每個人都可以看到所有憑據(jù)嗎?


我不確定我是否完全理解這個問題,但你是對的 - 如果記錄了秘密,這是一個問題,但在任何環(huán)境中。如果應(yīng)用程序開發(fā)人員在將憑據(jù)傳遞給 eg 之前將電子郵件/密碼組合推送到日志Auth.signInWithEmailAndPassword(),那么可以看到日志的每個人都將能夠捕獲它們。如果您在庫中發(fā)現(xiàn)此類日志語句,您絕對應(yīng)該通知庫開發(fā)人員,以便他們可以修復(fù)該問題。


我?guī)缀蹩梢钥隙阋呀?jīng)知道了,你的意思是別的,我只是想把它放在那里為了完整起見^^。


對于像這樣與服務(wù)器交互的javascript庫,服務(wù)器(Firestore)如何防止惡意者通過控制臺修改數(shù)據(jù)?一旦他們登錄,他們可以簡單地從控制臺向服務(wù)器發(fā)送命令,因?yàn)樗皇撬械?javascript。我對么?


以應(yīng)用程序用戶身份登錄后,該用戶將只能訪問通過定義的安全規(guī)則為他們啟用的應(yīng)用程序部分。對于您給出的安全規(guī)則,您是對的:這太寬松了,只要有人經(jīng)過身份驗(yàn)證,只要他們完全經(jīng)過身份驗(yàn)證,他們就可以讀寫(因此,這只會阻止訪問您的應(yīng)用程序而沒有驗(yàn)證。


如果您想確保用戶只能查看和更改他們自己的數(shù)據(jù),您可以使用如下規(guī)則:


rules_version = '2';

service cloud.firestore {

  match /databases/{database}/documents/{userId} {

    match /{document=**} {

      allow read, update, delete: if request.auth.uid == userId;

      allow create: if request.auth.uid != null;

    }

  }

}

這只是一個例子,官方的 Firestore 安全文檔比我能做到的要全面得多^^。


應(yīng)用程序用戶既不能登錄項(xiàng)目的 Firebase 控制臺,也不能使用 Firebase CLI 工具。


查看完整回答
反對 回復(fù) 2022-01-24
  • 1 回答
  • 0 關(guān)注
  • 285 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號