Google 身份验证 - 使它从 2 个按钮与 cakephp 上的 1 个按钮一起工作
Google Authentication - making it from 2 buttons work with 1 button on cakephp
我正在使用 cakephp 进行 google 身份验证注册。我设法让它工作并设法获取所有用户的信息(来自经过身份验证的用户信息的姓名、姓氏和电子邮件)并将它们存储在隐藏值中并使用 cakephp 将它们传递给数据库。但是,我设法用 2 个按钮做到了这一点。第一个按钮调用按钮(使用 javascript)验证 google 帐户并将值(姓名、姓氏和电子邮件)分配给隐藏的表单输入,第二个按钮是实际的 $this- >Form->按钮,将用户及其所有信息添加到数据库中..
现在,当然,这通常是不正确的,您将只有 1 个按钮来注册您然后让您登录(如果您之前已经注册,则让您登录)。因此,我尝试使用 onclick="googleAuthentication" 执行表单按钮,但它一直在进行身份验证并尝试注册没有值的用户(它没有为隐藏字段分配值)。我该怎么做才能解决这个问题?我想以某种方式在 google 身份验证方法中添加表单,如果可能的话..
这是完美运行的带有 2 个按钮的版本的代码:
使用 cakephp 的表单:
echo $this->Form->create($user);
echo $this->Form->hidden('first_name', ['id' => 'nameInput'], ['value' => '']);
echo $this->Form->hidden('last_name', ['id' => 'surnameInput'], ['value' => '']);
echo $this->Form->hidden('email', ['id' => 'emailInput'], ['value' => '']);
echo $this->Form->hidden('role_id', ['value' => '2']);
echo $this->Form->hidden('password', ['value' => 'N/A']);
调用方法进行google认证的按钮:
<button type="button" class="btn btn-warning col-md-12" onclick="googleSignIn()">Google Authenticate</button>
认证方法:
function googleSignIn(){
var provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider).then(function(result){
var user = result.user;
var fullName = user.displayName;
var index = fullName.indexOf(" ");
var name = fullName.substr(0, index);
var surname = fullName.substr(index + 1);
var email = user.email;
document.getElementById('nameInput').value = name;
document.getElementById('surnameInput').value = surname;
document.getElementById('emailInput').value = email;
console.log("Success Google Account Linked");
}).catch(function(err){
console.log(err);
console.log("Failed to do");
})
是否可以添加 javascript 命令来触发您其他按钮的点击操作(或者只提交现在完成的表单)?
或者用户需要在提交前查看表单的原因是什么?
function googleSignIn(){
var provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider).then(function(result){
var user = result.user;
var fullName = user.displayName;
var index = fullName.indexOf(" ");
var name = fullName.substr(0, index);
var surname = fullName.substr(index + 1);
var email = user.email;
document.getElementById('nameInput').value = name;
document.getElementById('surnameInput').value = surname;
document.getElementById('emailInput').value = email;
console.log("Success Google Account Linked");
document.getElementById('userSubmitButton).click();
}).catch(function(err){
console.log(err);
console.log("Failed to do");
})
唐德雷克
我正在使用 cakephp 进行 google 身份验证注册。我设法让它工作并设法获取所有用户的信息(来自经过身份验证的用户信息的姓名、姓氏和电子邮件)并将它们存储在隐藏值中并使用 cakephp 将它们传递给数据库。但是,我设法用 2 个按钮做到了这一点。第一个按钮调用按钮(使用 javascript)验证 google 帐户并将值(姓名、姓氏和电子邮件)分配给隐藏的表单输入,第二个按钮是实际的 $this- >Form->按钮,将用户及其所有信息添加到数据库中..
现在,当然,这通常是不正确的,您将只有 1 个按钮来注册您然后让您登录(如果您之前已经注册,则让您登录)。因此,我尝试使用 onclick="googleAuthentication" 执行表单按钮,但它一直在进行身份验证并尝试注册没有值的用户(它没有为隐藏字段分配值)。我该怎么做才能解决这个问题?我想以某种方式在 google 身份验证方法中添加表单,如果可能的话..
这是完美运行的带有 2 个按钮的版本的代码:
使用 cakephp 的表单:
echo $this->Form->create($user);
echo $this->Form->hidden('first_name', ['id' => 'nameInput'], ['value' => '']);
echo $this->Form->hidden('last_name', ['id' => 'surnameInput'], ['value' => '']);
echo $this->Form->hidden('email', ['id' => 'emailInput'], ['value' => '']);
echo $this->Form->hidden('role_id', ['value' => '2']);
echo $this->Form->hidden('password', ['value' => 'N/A']);
调用方法进行google认证的按钮:
<button type="button" class="btn btn-warning col-md-12" onclick="googleSignIn()">Google Authenticate</button>
认证方法:
function googleSignIn(){
var provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider).then(function(result){
var user = result.user;
var fullName = user.displayName;
var index = fullName.indexOf(" ");
var name = fullName.substr(0, index);
var surname = fullName.substr(index + 1);
var email = user.email;
document.getElementById('nameInput').value = name;
document.getElementById('surnameInput').value = surname;
document.getElementById('emailInput').value = email;
console.log("Success Google Account Linked");
}).catch(function(err){
console.log(err);
console.log("Failed to do");
})
是否可以添加 javascript 命令来触发您其他按钮的点击操作(或者只提交现在完成的表单)?
或者用户需要在提交前查看表单的原因是什么?
function googleSignIn(){
var provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider).then(function(result){
var user = result.user;
var fullName = user.displayName;
var index = fullName.indexOf(" ");
var name = fullName.substr(0, index);
var surname = fullName.substr(index + 1);
var email = user.email;
document.getElementById('nameInput').value = name;
document.getElementById('surnameInput').value = surname;
document.getElementById('emailInput').value = email;
console.log("Success Google Account Linked");
document.getElementById('userSubmitButton).click();
}).catch(function(err){
console.log(err);
console.log("Failed to do");
})
唐德雷克