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");
    })

唐德雷克