Как реализовать и настроить интерфейс забытого пароля в Auth0 с помощью пользовательского шаблона формы входа? - PullRequest
0 голосов
/ 19 апреля 2020

В настоящее время я использую шаблон пользовательской формы входа в свое приложение с Auth0, шаблон пользовательской формы входа является прямым по сравнению с шаблоном блокировки для настройки. В настоящее время мы не забыли пароль в шаблоне формы пользовательского входа. Я просмотрел статьи сообщества Auth0, в которых они дали несколько ссылок, где мы вызываем пользовательскую функцию для забытого пароля, получая некоторые ошибки.

  • Кстати, если мы используем шаблон блокировки, это уже встроенная функция, Я хочу реализовать тот же самый в пользовательском логине в форме, ниже мой текущий код FYI. Что касается этого, я ознакомился с некоторыми статьями, перечисленными по ссылкам ниже, может кто-нибудь помочь мне в этом, очень признателен. *

    enter image description here

    Справочные ссылки:

    https://community.auth0.com/t/how-to-create-a-forgot-password-reset-password-link-when-using-universal-login-but-with-customize-login-page/33992/2

    https://community.auth0.com/t/how-do-you-reset-the-password-with-custom-ui/6758

        window.addEventListener('load', function() {
          var config = JSON.parse(
            decodeURIComponent(escape(window.atob('@@config@@')))
          );
          var params = Object.assign({
            /* additional configuration needed for use of custom domains
            overrides: {
              __tenant: config.auth0Tenant,
              __token_issuer: 'YOUR_CUSTOM_DOMAIN'
            }, */
            domain: config.auth0Domain,
            clientID: config.clientID,
            redirectUri: config.callbackURL,
            responseType: 'code'
          }, config.internalOptions);
    
          var webAuth = new auth0.WebAuth(params);
          var databaseConnection = 'Username-Password-Authentication';
    
          function login(e) {
            e.preventDefault();
            var username = document.getElementById('email').value;
            var password = document.getElementById('password').value;
            webAuth.login({
              realm: databaseConnection,
              username: username,
              password: password
            }, function(err) {
              if (err) displayError(err);
            });
          }
    
          function signup() {
            var email = document.getElementById('email').value;
            var password = document.getElementById('password').value;
    
            webAuth.redirect.signupAndLogin({
              connection: databaseConnection,
              email: email,
              password: password
            }, function(err) {
              if (err) displayError(err);
            });
          }
    
          function loginWithGoogle() {
            webAuth.authorize({
              connection: 'google-oauth2'
            }, function(err) {
              if (err) displayError(err);
            });
          }
    
          function loginWithFacebook() {
            webAuth.authorize({
              connection: 'facebook'
            }, function(err) {
              if (err) displayError(err);
            });
          }
    
          function displayError(err) {
            var errorMessage = document.getElementById('error-message');
            errorMessage.innerHTML = err.description;
            errorMessage.style.display = 'block';
          }
    
          document.getElementById('btn-login').addEventListener('click', login);
          document.getElementById('btn-google').addEventListener('click', loginWithGoogle);
          document.getElementById('btn-facebook-signup').addEventListener('click', loginWithFacebook);
          document.getElementById('btn-signup').addEventListener('click', signup);
        });
    body, html {height: 100%; background-color: #ffffff; font: 300 14px Roboto, sans-serif;}
    input[type='checkbox']{position:relative;margin:0 4px 0 0;cursor:pointer;box-shadow:none;border:0;display:inline-block;width:16px;top:0px;}
    input[type='checkbox']:before{-webkit-transition:all 0.3s ease-in-out;-moz-transition:all 0.3s ease-in-out;transition:all 0.3s ease-in-out;content:"";position:absolute;left:0;z-index:1;width:16px;height:16px;border:2px solid #d7d7e4;}
    input[type='checkbox']:checked:before{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg);height:9px;width:16px;border-color:#00AFF0;border-top-style:none;border-right-style:none;}
    input[type='checkbox']:after{content:"";position:absolute;top:-3px;left:0;width:18px;height:21px;background:#fff;cursor:pointer;}
    .form-control{border-radius:0;box-shadow:none;}
    h1,h2{font-family:Roboto, sans-serif;color:rgba(0, 0, 0, 0.87);font-weight:300;}
    .label--checkbox{position:relative;margin:0px 0 6px;font-family:'roboto';font-weight:400;cursor:pointer;}
    /*Icons*/
    @font-face{font-family:'Material-Design-Iconic-Font';font-display:swap;src:url('https://securemedia.newjobs.com/global/fonts/materialdesigniconicfont/Material-Design-Iconic-Font.woff2?v=2.2.0') format('woff2'), url('https://securemedia.newjobs.com/global/fonts/materialdesigniconicfont/Material-Design-Iconic-Font.woff?v=2.2.0') format('woff'), url('https://securemedia.newjobs.com/global/fonts/materialdesigniconicfont/Material-Design-Iconic-Font.ttf?v=2.2.0') format('truetype');font-weight:normal;font-style:normal;}
    .zmdi{display:inline-block;font:normal normal normal 14px/1 'Material-Design-Iconic-Font';font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}
    .zmdi-lock:before{content:'\f191';}
    .zmdi-account:before{content:'\f207';}
    .zmdi-facebook:before{content:'\f343';}
    .zmdi-lock:before{content:'\f191';}
    .zmdi-account:before{content:'\f207';}
    .zmdi-facebook:before{content:'\f343';}
    /*Buttons*/
    .btn.btn-md{height:48px;padding:15px 12px;}
    .btn:active,.btn:focus{box-shadow:none;}
    .btn-purple-fill{background:#642891;border-color:transparent;border-radius:0;color:#ffffff;font:400 14px 'Roboto', sans-serif;-webkit-transition:all 0.2s ease-in;transition:all 0.2s ease-in;}
    .btn-purple-fill:hover,.btn-purple-fill:active,.btn-purple-fill:focus{background:#78449f;color:#ffffff;box-shadow:none;}
    .btn-facebook{background:#3b5998;border-color:transparent;border-radius:0;color:#ffffff;font:400 14px 'Roboto', sans-serif;-webkit-transition:all 0.2s ease-in;transition:all 0.2s ease-in;}
    .btn-facebook:hover,.btn-facebook:active,.btn-facebook:focus{background:#5778be;color:#ffffff;}
    .btn-facebook .zmdi-facebook{background-color:#fff;color:#3b5998;font-size:24px;font-weight:normal;left:12px;position:absolute;top:11px;padding:2px 6px;border-radius:2px;}
    /*Form, input, checkbox etc spacing..*/
    .form-control{-webkit-appearance:none;color:#333;font-weight:400;}
    form a{color:#642891;font-weight:400;}
    form a:hover,form a:active,form a:focus{color:#642891;text-decoration:underline;}
    form label{font-size:12px;font-weight:500;line-height:16px;margin-bottom:4px;}
    form .form-group{margin-bottom:12px;}
    form .form-control{color:#212121;color:rgba(0, 0, 0, 0.87);border-width:1px;border-style:solid;border-color:#bdbdbd;border-color:rgba(0, 0, 0, 0.26);border-radius:0;font-size:14px;padding:8px 12px;margin:0;height:40px;background-color:transparent!important;}
    .form-control:focus{border-color:#00AFF0;box-shadow:none;}
    .login-form  h2{font-weight:400;font-size:14px;line-height:18px;font-family:Roboto, sans-serif;color:rgba(0, 0, 0, 0.87);}
    .has-feedback .form-control{padding-right:34px;}
    .has-feedback-left .form-control{padding-right:12px;padding-left:40px;}
    .has-feedback-left .form-control-feedback{left:0;}
    .form-control-feedback{line-height:34px!important;}
    .has-feedback .form-control-feedback{color:#757575;color:rgba(0, 0, 0, 0.54);font-size:27px;position:absolute;top:24px;left:8px;right:0;display:block;width:24px;height:28px;line-height:34px;text-align:center;}
    .form-container-login-page .label--checkbox input{margin-right:12px;}
    form .btn{margin:0 0 16px;}
    form #btn-login{margin:24px 0 17px;}
    .login-form-options{padding-top:2px;}
    .btn-block + .btn-block{margin-top:8px;}
    input[type=checkbox]{width:18px;}
    .label--checkbox{position:relative;margin:0;font-size:14px;font-weight:400;line-height:20px;cursor:pointer;}
    input[type=checkbox]{position:relative;margin:0;cursor:pointer;box-shadow:none;border:0;display:inline-block;width:18px;height:20px;vertical-align:text-top;}
    input[type='checkbox']:after{content:"";position:absolute;top:-3px;left:0;width:20px;height:23px;background:#ffffff;border:1px solid #e0e0e0;border:1px solid rgba(0, 0, 0, 0.12);cursor:pointer;}
    input[type='checkbox']:before{border:2px solid transparent;left:4px;top:4px;width:13px;height:8px;transition:0s;}
    input[type='checkbox']:checked:before{height:5px;width:13px;}
    .btn-signup{font-size:12px;line-height:20px;font-weight:500;padding:7px 16px;color:#642891;border:1px solid #642891;transition:all .2s ease-in;display:inline-block;}
    .btn-signup:active,.btn-signup:focus,.btn-signup:hover{font-size:12px;font-weight:500;color:#fff;background:#642891;text-decoration:none;transition:all .2s ease-in;}
    .googleSignin{color:#fff;font-weight:500;background-color:#0073e9;border:none;position:relative;height:40px;margin-bottom:12px;font-size:14px;padding:0 0 0 0px;line-height:22px;}
    .googleSignin:disabled{cursor:not-allowed;background-color:rgb(229, 229, 229);}
    .googleSignin:hover,.googleSignin:focus{-webkit-box-shadow:0 0 3px 3px rgba(66,133,244,.3);box-shadow:0 0 3px 3px rgba(66,133,244,.3);}
    .googleSignin span{padding:10px 14px;display:inline-block;}
    .googleSignin img{display:inline-block;position:absolute;left:-3px;top:-3px;}    
    /*-----Or|Divider| Stytling---- */
    .or-divider{margin:24px 0;text-align:center;border-top:1px solid #ebebeb;height:0;position:relative;}
    .or-divider .or-divider-text{color:#757575;color:rgba(0, 0, 0, 0.54);font-size:14px;font-weight:400;line-height:20px;text-align:center;display:inline-block;padding:8px;background:#fff;border-radius:20px;margin:0 auto;position:relative;top:-19px;}
    .login-header {margin-top: 50px; margin-bottom: 20px;}
    .login-header h1 {font-size: 24px; line-height: 32px;}
    #error-message {display: none;}
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
      <title>Sign In with Auth0</title>
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    </head>
    <body>
      <div class="container">
        <div class="row">
        <div class="col-xs-12 col-sm-6 col-lg-4 col-md-6 col-sm-offset-3 col-md-offset-3 col-lg-offset-4 form-container-login-page">
          <div class="login-header">
            <h1>Sign In With Auth0 Testing Form</h1>
          </div>
          <div id="error-message" class="alert alert-danger"></div>
          <form onsubmit="return false;" method="post">
            <div class="form-group has-feedback has-feedback-left">
             <label for="name">Email</label>
              <input
                type="email"
                class="form-control"
                id="email"
                placeholder="Enter your email">
                <i class="form-control-feedback zmdi zmdi-account"></i>
            </div>
    
            <div class="form-group has-feedback has-feedback-left">
              <label for="name">Password</label>
              <input
                type="password"
                class="form-control"
                id="password"
                placeholder="Enter your password">
                <i class="form-control-feedback zmdi zmdi-lock"></i>
            </div>
            <div class="login-form-options">
              <label for="PersistLogin" class="label--checkbox">
                  <input name="PersistLogin" id="PersistLogin" value="true" type="checkbox">
                  <input name="PersistLogin" type="hidden" value="false" />Keep me logged in
              </label>
              <span class="pull-right"><a class="m-link" href="javascript:void(0)">Forgot password?</a> </span>
          </div>   
            <button
              type="submit"
              id="btn-login"
              class="btn btn-md btn-block btn-purple-fill">
              Sign In
            </button>
            <div class="or-divider">
             <span class="or-divider-text">OR</span>
            </div>
            <div class="btn-group btn-block" id="facebookDiv">
              <a id="btn-facebook-signup" class="btn btn-md btn-block btn-facebook">
                  <i class="zmdi zmdi-facebook"></i>
                  Sign In with Facebook
              </a>
          </div>
          <div class="btn-group btn-block" id="googleDiv">
            <button id="btn-google" class="googleSignin btn-block" type="button">
                <img src="https://securemedia.newjobs.com/global/img/icons/btn_google_dark_normal_ios.svg" alt="Google logo">
                <span>Sign in with Google</span>
            </button>
        </div>
            <div class="form-group login-form">
            <h2>Don't have a Company account?</h2>
            <a id="btn-signup" class="btn-signup" role="button">Sign Up</a>
          </div>        
          </form>
        </div>
    </div>
      </div>
    
      <!--[if IE 8]>
      <script src="//cdnjs.cloudflare.com/ajax/libs/ie8/0.2.5/ie8.js"></script>
      <![endif]-->
    
      <!--[if lte IE 9]>
      <script src="https://cdn.auth0.com/js/polyfills/1.0/base64.min.js"></script>
      <script src="https://cdn.auth0.com/js/polyfills/1.0/es5-shim.min.js"></script>
      <![endif]-->
    
      <script src="https://cdn.auth0.com/js/auth0/9.12/auth0.min.js"></script>
      <script src="https://cdn.auth0.com/js/polyfills/1.0/object-assign.min.js"></script>
    </body>
    </html>
...