React
如何
npm install @passwordlessdev/passwordless-clientimport {useContext, useRef, useState} from "react";
import authContext from "../context/AuthProvider";
import * as Passwordless from "@passwordlessdev/passwordless-client";
import YourBackendClient from "../services/YourBackendClient";
import {PASSWORDLESS_API_KEY, PASSWORDLESS_API_URL} from "../configuration/PasswordlessOptions";
export default function LoginPage() {
const errRef = useRef();
const [errMsg, setErrMsg] = useState("");
const [success, setSuccess] = useState(false);
const { setAuth } = useContext(authContext);
const handleSubmit = async (e) => {
e.preventDefault();
// 如果是自托管,PASSWORDLESS_API_URL 将与 https://v4.passwordless.dev 不同
const passwordless = new Passwordless.Client({
apiUrl: PASSWORDLESS_API_URL,
apiKey: PASSWORDLESS_API_KEY
});
const yourBackendClient = new YourBackendClient()
// 首先我们获取我们的令牌
const token = await passwordless.signinWithDiscoverable();
if (!token) {
return;
}
// 然后您在后端验证令牌的有效性。
const verifiedToken = await yourBackendClient.signIn(token.token);
// 例如,如果您的令牌被视为有效,您的后端可能会返回 JWT 令牌。
localStorage.setItem('jwt', verifiedToken.jwt);
// 我们很高兴能继续。
setAuth({ verifiedToken });
setSuccess(true);
}
return (
<>
{success ? (
<section>
<h1>You are logged in!</h1>
<br />
<p>{/* <a href="#">Go to Home</a> */}</p>
</section>
) : (
<section>
<p
ref={errRef}
className={errMsg ? "errmsg" : "offscreen"}
aria-live="assertive"
>
{errMsg}
</p>
<h1>Sign In</h1>
<button onClick={handleSubmit}>Sign In</button>
<p>
Need an Account?
<br />
<span className="line">
<a href="#">Sign Up</a>
</span>
</p>
</section>
)}
</>
);
}参考
最后更新于