溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

完成郵箱密碼重置功能中遇到的問題

發(fā)布時間:2020-06-25 07:37:11 來源:網絡 閱讀:504 作者:金明略 欄目:開發(fā)技術

     1.寫完接口后用postman測試接口功能時發(fā)現(xiàn)所有Post請求都變成了非法登錄,以前不登錄都能直接請求的,想到是不是代碼和git上有區(qū)別,仔細比對后發(fā)現(xiàn)沒有影響,最后發(fā)現(xiàn)要先調用login接口進行一次登錄,可能之前是同事已經幫我登錄了,所以上次不用登錄。

     2.郵箱無法發(fā)送郵件,經檢查每次登錄要輸入驗證碼,一開始以為是驗證碼導致的,后來想到發(fā)郵件相當于客戶端,直接調用stmp服務的,登錄郵箱后發(fā)現(xiàn)新申請的測試郵箱還沒開通smtp服務,于是先設置了授權碼,然后再代碼中用這個授權碼代替密碼使用服務,成功發(fā)送郵件。

     3.當郵件發(fā)送不成功時,報錯信息最好在recoverWith中捕獲,經過查詢,發(fā)現(xiàn)recover和recoverWith的關系相當于map和flatMap,recover能夠創(chuàng)建一個新future對象,該對象當計算完成時持有和原future對象一樣的值。如果執(zhí)行不成功則偏函數(shù)的參數(shù)會被傳遞給使原Future失敗的那個Throwable異常。如果它把Throwable映射到了某個值,那么新的Future就會成功完成并返回該值。如果偏函數(shù)沒有定義在Throwable中,那么最終產生結果的future也會失敗并返回同樣的Throwable。組合器recoverWith能夠創(chuàng)建一個新future對象,當原future對象成功完成計算時,新future對象包含有和原future對象相同的計算結果。若原future失敗或異常,偏函數(shù)將會返回造成原future失敗的相同的Throwable異常。如果此時Throwable又被映射給了別的future,那么新Future就會完成并返回這個future的結果。

     4.recoverWith中有如下一段代碼:

case e: MessagingException => {
  db.run {
    DataCloudUsers
      .filter(t => t.username === username && t.deleted === 0)
      .map(_.password).update(x.password)

  }.flatMap(_ => Future.failed(UnsuccessfulSendMail(x.username, x.email)))


    之前flatMap寫成map的時候,調用post接口一直返回值轉換異常,后來發(fā)現(xiàn)可能就是map和flatMap的細微差別導致的,flatMap在按照映射規(guī)則轉換完之后還會把結果從抽出來組成一個扁平化的數(shù)組,所以flatMap返回來的是Future類型的。

 5.把如果不是MessagingException的情況用下劃線代替作為recoverWith中的一個case的話,貌似不會執(zhí)行,具體原因待研究。


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI