在表单提交时检查用户是否登录drupal 7

在表单提交时检查用户是否登录drupal 7,drupal,login,Drupal,Login,我需要你的帮助。 我有drupal 7 cck表单,可供匿名用户查看,但当匿名用户填写表单并单击提交时,我想显示用户登录表单,登录后无需页面刷新,cck表单将自动提交并显示感谢消息。 我为此搜索了很多,但没有找到任何解决方案。 请帮助我,我不知道如何做。您可以编写一个自定义模块,使用form\u alter hook。然后,对于您的CCK表单,您可以检查用户是否已登录,如果未登录,请在表单中添加用户名/密码字段供用户填写。然后向表单添加自定义验证函数,以便在提交表单时,验证函数尝试以编程方式登录

我需要你的帮助。 我有drupal 7 cck表单,可供匿名用户查看,但当匿名用户填写表单并单击提交时,我想显示用户登录表单,登录后无需页面刷新,cck表单将自动提交并显示感谢消息。 我为此搜索了很多,但没有找到任何解决方案。
请帮助我,我不知道如何做。

您可以编写一个自定义模块,使用form\u alter hook。然后,对于您的CCK表单,您可以检查用户是否已登录,如果未登录,请在表单中添加用户名/密码字段供用户填写。然后向表单添加自定义验证函数,以便在提交表单时,验证函数尝试以编程方式登录用户。如果登录失败,则显示表单错误,否则将全局用户设置为登录用户。因此,当表单点击提交功能时,用户应该已经登录

因此,对于您的自定义模块,类似以下内容:

<?php
function mymodule_form_alter(&$form,&$form_state,$form_id){
    global $user;
    //only for the form we are looking for, and if the user is anonymous
    if (($form_id == 'my_form_id') && ($user->uid==0)){
        $form['login']  = array(
            '#type' => 'fieldset',
            '#title'    => 'Login',
        );
        $form['login']['username'] = array(
            '#type' => 'textfield',
            '#title' => 'Username',
            '#required' => true,
        );
        $form['login']['password'] = array(
            '#type' => 'password',
            '#title'    => 'Password',
            '#required' => true,
        );

        $form['#validate'][] = 'mymodule_my_form_validate';
    }
}

function mymodule_my_form_validate(&$form,&$form_state){
    global $user;

    //stop from re-login if there were other validation errors
    if ($user->uid == 0){
        $username = $form_state['values']['username'];
        $password = $form_state['values']['password'];
        //authenticate the user (attempt to login)
        if ($uid = user_authenticate($username,$password)){
            $user = user_load($uid);
            //finalize login
            user_login_finalize(array('name'=>$username,'pass'=>$password));
        }else{
            form_set_error('username','Invalid username or password');
        }
    }
}

您可以编写一个使用form\u alter hook的自定义模块。然后,对于您的CCK表单,您可以检查用户是否已登录,如果未登录,请在表单中添加用户名/密码字段供用户填写。然后向表单添加自定义验证函数,以便在提交表单时,验证函数尝试以编程方式登录用户。如果登录失败,则显示表单错误,否则将全局用户设置为登录用户。因此,当表单点击提交功能时,用户应该已经登录

因此,对于您的自定义模块,类似以下内容:

<?php
function mymodule_form_alter(&$form,&$form_state,$form_id){
    global $user;
    //only for the form we are looking for, and if the user is anonymous
    if (($form_id == 'my_form_id') && ($user->uid==0)){
        $form['login']  = array(
            '#type' => 'fieldset',
            '#title'    => 'Login',
        );
        $form['login']['username'] = array(
            '#type' => 'textfield',
            '#title' => 'Username',
            '#required' => true,
        );
        $form['login']['password'] = array(
            '#type' => 'password',
            '#title'    => 'Password',
            '#required' => true,
        );

        $form['#validate'][] = 'mymodule_my_form_validate';
    }
}

function mymodule_my_form_validate(&$form,&$form_state){
    global $user;

    //stop from re-login if there were other validation errors
    if ($user->uid == 0){
        $username = $form_state['values']['username'];
        $password = $form_state['values']['password'];
        //authenticate the user (attempt to login)
        if ($uid = user_authenticate($username,$password)){
            $user = user_load($uid);
            //finalize login
            user_login_finalize(array('name'=>$username,'pass'=>$password));
        }else{
            form_set_error('username','Invalid username or password');
        }
    }
}