NIFCLOUD-mbaas / UserCommunity

ニフクラ mobile backend ユーザーコミュニティ
https://mbaas.nifcloud.com/
82 stars 18 forks source link

パスワードリセットメールが出せない。【JavaScript】 #1131

Closed nonarin closed 4 years ago

nonarin commented 4 years ago

以下のソースで実行しましたが、 ncmb.User.requestPasswordReset(mailAddress) .then(function(user) {  で固まっていると思われパスワードリセットメールが出せないみたいです。

var mailAddress = currentLoginUser.get("mailAddress"); までは、通っていました。

// 【メール / PW 認証】「パスワード再設定」ボタン押下時の処理
function onPasswordReset() {
    // loading の表示
    //$.mobile.loading('show');
    currentLoginUser = ncmb.User.getCurrentUser();
    var mailAddress = currentLoginUser.get("mailAddress");
    ncmb.User.requestPasswordReset(mailAddress)
             .then(function(user) {
                 // 処理成功 //
                 alert("【メール / PW 認証】パスワードリセットメールを配信しました。" + mailAddress);
                 console.log("【メール / PW 認証】パスワードリセットメールを配信しました。");
                 alert("届いたメールに記載されているURLにアクセスし、パスワードを変更してください。");
                // 【メール / PW 認証】ログインページへ移動
                $.mobile.changePage('#emailLoginPage');
             })
             .catch(function(error) {
                 /* 処理失敗 */
                 alert("【メール / PW 認証】パスワードリセットメールの配信に失敗しました:" + error);
                 console.log("【メール / PW 認証】パスワードリセットメールの配信失敗しました:" + error);
             });

    $.mobile.loading('hide');

}

どなたか、解決方法ご存じの方いましたら宜しくお願い致します。

goofmint commented 4 years ago

処理が固まるということはまずないです。何かエラーが出ているはずなので、開発者ツールを使って処理(特にネットワーク)を確認するといいかと思います。

nonarin commented 4 years ago

早速の返信ありがとうございます。開発者ツールでお勧めがありましたらご教授くださると助かります。

goofmint commented 4 years ago

お?開発者ツールというと、Google Chromeの開発者ツールのことです。

Google Chromeデベロッパーツールとは?使い方や簡易的な解析テクニックについてご紹介します! | SEO研究所サクラサクラボ

nonarin commented 4 years ago

ご教授ありがとうございました。 試してみます。

nonarin commented 4 years ago

app.js:73 Uncaught TypeError: ncmb.User.requestPasswordReset is not a function at HTMLAnchorElement.onEmailLoginBtn (app.js:73) at HTMLAnchorElement.dispatch (jquery.min.js:3) at HTMLAnchorElement.r.handle (jquery.min.js:3) onEmailLoginBtn @ app.js:73 dispatch @ jquery.min.js:3 r.handle @ jquery.min.js:3

おかげさまで、エラーが取れました。原因はわかったような、わかんないような 関数がみつかんなかったみたいなメッセージだと思うんですが?

https://mbaas.nifcloud.com/assets/sdk_doc/javascript/jsdoc/classes/NCMB.User.html#api-classes をみると requestPasswordReset ( callback ) Defined in lib/user.js:228 メールアドレス認証ユーザの登録メールアドレス宛にパスワード再設定のメールを送信します。 Parameters: callback Function コールバック関数 Returns: APIレスポンス

と書いてあったので使えると思ったんですが・・・ ncmb.User.requestPasswordReset(mailAddress)のように 引数いれても入れなくても同じでした。ドキュメントにはあるけど関数の実体がないか名前が間違ってる?ということでしょうか?

色々すいません。

goofmint commented 4 years ago

どのライブラリを使っているでしょうか?プッシュ通知用のプラグインはJavaScript SDKとは異なります、念のため。

Monacaであれば、この辺りが参考になるかと思います。

https://mbaas.nifcloud.com/doc/current/introduction/div_quickstart_javascript_monaca.html

nonarin commented 4 years ago

Monacaもプッシュ通知用のプラグインも使ってません。 メールアドレス認証のサンプルは動かせたので、これをアレンジして パスワード変更または再設定をしてみようと思い SDKリファレンスの JavaScript_currentとJavaScript_v2.2.2にパスワード再設定の関数が載ってたので、同じようにつかえるなかなと思ってやってみました。

goofmint commented 4 years ago

前提条件がよく分からないのですが、以下はどうなっていますか?

nonarin commented 4 years ago

色々すいません。たいそうなお手数おかけして・・・

①js/ncmb.min.js のバージョンは version: 3.1.0 です。 ②以下のように利用しているWEB(HTML)でJavaScript SDKを読み込んで

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Multi-page template</title>
    <link rel="stylesheet" href="css/themes/default/jquery.mobile-1.4.5.min.css">
    <link rel="stylesheet" href="assets/css/jqm-demos.css">
    <link rel="shortcut icon" href="favicon.ico">
    **<script src="js/ncmb.min.js"></script>** ← ここです。
    <script src="js/jquery.js"></script>
    <script src="_assets/js/index.js"></script>
    <script src="js/jquery.mobile-1.4.5.min.js"></script>
    **<script src="js/app.js"></script>
    <script src="js/cssua.min.js"></script>**
    <title>てすと</title>
</head>
<body>

<!-- ③メールアドレス認証のサンプルで動作確認できたコードも同じです。
④パスワード変更処理のコードでNCMBの初期化周りですが
 app.js ソースの先頭で-->
 // [NCMB] SDKの初期化
 var ncmb = new NCMB(appKey, clientKey);
 // [NCMB] user インスタンスの生成
 var user = new ncmb.User();
としています。

 // ログイン中の会員
 var currentLoginUser; ` 

function` onPasswordReset() {
    // loading の表示
    //$.mobile.loading('show');
    currentLoginUser = ncmb.User.getCurrentUser();
    var mailAddress = currentLoginUser.get("mailAddress");
        alert("パスワードリセットメールを開始" + mailAddress);  ← これはでるけど
    **ncmb.User.requestPasswordReset().then(function(user) {**  ← この部分が「 Uncaught TypeError: ncmb.User.requestPasswordReset is not a function」となり動かない。
                 // 処理成功 //
                 alert("【メール / PW 認証】パスワードリセットメールを配信しました。" + mailAddress);
                 console.log("【メール / PW 認証】パスワードリセットメールを配信しました。");
                 alert("届いたメールに記載されているURLにアクセスし、パスワードを変更してください。");
//              // loading の表示終了
//                 $.mobile.loading('hide');
                // 【メール / PW 認証】ログインページへ移動
                $.mobile.changePage('#emailLoginPage');
             })
             .catch(function(error) {
//                 /* 処理失敗 */
                 alert("【メール / PW 認証】パスワードリセットメールの配信に失敗しました:" + error);
                 console.log("【メール / PW 認証】パスワードリセットメールの配信失敗しました:" + error);
//              // loading の表示終了
//                 $.mobile.loading('hide');
             });
    $.mobile.loading('hide');
}
goofmint commented 4 years ago

使い方が違うようです。

https://mbaas.nifcloud.com/doc/current/user/basic_usage_javascript.html#%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%81%AE%E3%83%AA%E3%82%BB%E3%83%83%E3%83%88

ncmb.User.requestPasswordReset() ではなく、 user.requestPasswordReset() となっています。

nonarin commented 4 years ago

user.set("mailAddress", "mail@example.com");  これ追加したら… あっ!うまくできました! ありがとうございます。色々お世話になりました。