Firebase Auth-ConfirmPasswordReset,如何从URL获取oobcode来传递函数?
我正在尝试使用firebase auth在我的网站上实现重置密码页面。我收到了重置密码页面的发送电子邮件。现在据我所知,你会收到一封带有链接的电子邮件,你需要点击链接,在这封电子邮件上会有一个密码,需要重置密码。现在,我不知道如何从url中获取所述代码,并已将其显示给用户。是否可以将代码放在电子邮件正文中,并让用户输入代码?如果没有,我如何从url中获取代码并为用户输入,以便用户只能输入密码?我的网站正在使用vue,这就是我目前所拥有的Firebase Auth-ConfirmPasswordReset,如何从URL获取oobcode来传递函数?,firebase,firebase-authentication,Firebase,Firebase Authentication,我正在尝试使用firebase auth在我的网站上实现重置密码页面。我收到了重置密码页面的发送电子邮件。现在据我所知,你会收到一封带有链接的电子邮件,你需要点击链接,在这封电子邮件上会有一个密码,需要重置密码。现在,我不知道如何从url中获取所述代码,并已将其显示给用户。是否可以将代码放在电子邮件正文中,并让用户输入代码?如果没有,我如何从url中获取代码并为用户输入,以便用户只能输入密码?我的网站正在使用vue,这就是我目前所拥有的 <template> <div cl
<template>
<div class="container">
<h3>reset pw page</h3>
<div class="row">
<form @submit.prevent="ResetPw()" class="col s12">
<div class="row">
<div class="input-field col s12">
<input type="password" id="password" v-model="password" />
<label>Password</label>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<input type="text" id="code" v-model="code" />
<label>Code</label>
</div>
</div>
<button type="submit" class="btn">Submit</button>
</form>
</div>
</div>
</template>
<script>
import firebase from "firebase/app";
export default {
data() {
return {
password: "",
code: ""
};
},
methods: {
ResetPw() {
firebase
.auth()
.confirmPasswordReset(this.code, this.password)
.then(() => {
console.log(`Password Changed!`);
})
.catch(err => console.log(err));
}
}
};
</script>
重置pw页
密码
代码
提交
从“firebase/app”导入firebase;
导出默认值{
数据(){
返回{
密码:“”,
代码:“
};
},
方法:{
ResetPw(){
火基
.auth()
.confirmPasswordReset(this.code,this.password)
.然后(()=>{
log(`Password Changed!`);
})
.catch(err=>console.log(err));
}
}
};
我想我已经完成了所有的工作,我只需要了解如何从链接中获取oobcode&oobcode=不确定如何从电子邮件正文中获取oobcode,但要在页面加载后从URL中获取代码,您可以参考以下问题:。在表单中,使用空字符串值为代码创建隐藏输入。加载窗口后,将从URL抓取代码,然后您可以将代码和密码传递到函数中
<body>
<form>
<input type="text" id='newPass' name='newPass' placeholder='New password'>
<input type="hidden" id='code' name='code' value="">
<button type='submit'>Submit</button>
</form>
</body>
<script>
$(window).load(function () {
function getParameterByName(name, url) {
if (!url) url = window.location.href;
name = name.replace(/[\[\]]/g, '\\$&');
var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, ' '));
}
var code = getParameterByName('oobCode')
document.getElementById('code').value = code;
</script>
提交
$(窗口)。加载(函数(){
函数getParameterByName(名称、url){
如果(!url)url=window.location.href;
name=name.replace(/[\[\]]/g,\\$&');
var regex=new RegExp('[?&]'+name+'(=([^]*)和|#|$),
结果=regex.exec(url);
如果(!results)返回null;
如果(!results[2])返回“”;
返回组件(结果[2]。替换(/\+/g');
}
var code=getParameterByName('oobCode')
document.getElementById('code')。value=code;
希望这有帮助!如果您使用的是react router,它不再解析查询,但您可以通过location.search访问它
const params = new URLSearchParams(this.props.location.search);
const code = params.get('oobCode')
const email = await firebase.auth().verifyPasswordResetCode(code)
或者,不使用this.props.location.search,您可以执行新的URLSearchParams(window.location.pathname)