我正在嘗試為我的游戲制作登錄頁面,以便我可以跟蹤所有內容.. 無論如何,我有足夠的 knoldgke 來使用 php 和 c# 構建它來配置與資料庫的連接......這里的一切都很好......
但是即使密碼正確(使用password_verify-password_hash)我總是遇到無效密碼錯誤我首先在php上跟蹤它以查看查詢是否有錯誤但完全沒問題我然后去了sql制作密碼而沒有散列普通密碼也我遇到了同樣的錯誤,所以最后一件事是統一 c#.. 我檢查了代碼它很好(通過讓它列印用戶并通過每個行程來跟蹤它)但我注意到從一開始就在從輸入欄位發送密碼之前到 php 檔案的空間很小,甚至沒有空間,這很奇怪我試圖復制它,但沒有任何跡象表明它甚至沒有騰出空間,但它就在那里。我試圖通過從代碼中的字串而不是 UI 中寫入來發送密碼它列印正常,但每當我使用輸入欄位時它都有同樣的問題(請記住:用戶名欄位沒有問題)所以我嘗試創建新欄位或復制用戶名欄位..同樣的事情這里有一張圖片:

這里還有視頻:
后 :
手動寫入密碼后的視頻:單擊此處2 我嘗試了洗掉空間的所有功能,它甚至無法識別為空間
public class ButtonVerify : MonoBehaviour
{
public Button SubmitButton;
public TMP_Text username;
public TMP_Text password;
// Start is called before the first frame update
void Start()
{
Button btn = SubmitButton.GetComponent<Button>();
btn.onClick.AddListener(TaskOnClick);
}
void TaskOnClick()
{
StartCoroutine(Login(username.text.ToString(), password.text.ToString()));
}
IEnumerator Login(string user_email, string user_pass)
{
WWWForm form = new WWWForm();
form.AddField("loginEmail", user_email);
form.AddField("loginPassword", user_pass);
using (UnityWebRequest www = UnityWebRequest.Post("imagine_theres_url",form))
{
yield return www.SendWebRequest();
if(www.isNetworkError || www.isHttpError)
{
Debug.Log(www.error);
}
else
{
Debug.Log(www.downloadHandler.text);
}
}
}
}
uj5u.com熱心網友回復:
這是一個已知的“問題”!參見例如這里
TMP_Inputfield有時會添加一個尾隨的不可見控制元件,char但僅在底層TMP_Text組件中。
解決方案:
而不是直接通過TMP_Text組件,TMP_InputField而是始終通過其TMP_Inputfield.text洗掉那些額外字符的屬性!
public TMP_InputField username;
public TMP_InputField password;
然后這應該可以解決問題
StartCoroutine(Login(username.text, password.text));
順便說一句,不需要呼叫ToString,嗯,a string;)
uj5u.com熱心網友回復:
我同意 [gunr2171][1] 的說法,即您沒有提供足夠的資訊來明確回答。但我會四處走動,提供一個模糊的診斷,可能準確也可能不準確。
是否有可能最后由藍線突出顯示的額外“空格”實際上代表了一個特殊的 ENDING 字符(參見下面的 [1]),它應該結束密碼輸入但不是密碼輸入的一部分?
你怎么知道的?與往常一樣,您既可以避免可疑情況,也可以檢查可疑情況。以下是完成每一項的可能方法。
避免
如果可以通過您的輸入界面,請執行以下操作:
- 輸入完整的密碼,別無其他。
- 不要鍵入下面 1 中列出的任何特殊 ENDING 字符。
- 使用滑鼠單擊移動到下一個欄位或按鈕。
如果問題消失了,那么您將需要下面 3 中描述的修復程式。否則,如果結果仍然很糟糕,或者您無法在界面上執行該測驗,那么請嘗試我的下一個建議...
檢查
檢查密碼中的每個單獨字符,并驗證其(ASCII 或 Unicode)VALUE 是一個大于空格 [2] 字符的 VALUE 的數字。您可以通過使用只有 1 個字符(或零?)的密碼的發明用戶進行測驗來幫助該程序
如果任何密碼字符小于空格字符(VALUE 32)(特別是最后一個),那么您需要下面 3 中描述的修復。
如果每個單獨的字符都是密碼可接受的,那么解決方案必須在別處。您將需要提供更多詳細資訊(例如,您使用什么功能來獲取用戶輸入的密碼)。
ENDING 字符是指“Enter”(換行符和/或回車符)或“Tab”之類的東西。
我的回復中的這個空格字符只是巧合地與您懷疑的字符相同。我使用它是因為它的 VALUE 標記了密碼中不允許的控制字符和通常允許的字符之間的邊界。
如果您被引導到這里,那么您需要洗掉有問題的字符 - VALUE 小于 SPACE 字符的字符。通常,有一個函式會使用您的密碼字串自動執行此操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/520393.html
標籤:C#数据库unity3d
