在表单提交时检查用户是否登录drupal 7
我需要你的帮助。 我有drupal 7 cck表单,可供匿名用户查看,但当匿名用户填写表单并单击提交时,我想显示用户登录表单,登录后无需页面刷新,cck表单将自动提交并显示感谢消息。 我为此搜索了很多,但没有找到任何解决方案。在表单提交时检查用户是否登录drupal 7,drupal,login,Drupal,Login,我需要你的帮助。 我有drupal 7 cck表单,可供匿名用户查看,但当匿名用户填写表单并单击提交时,我想显示用户登录表单,登录后无需页面刷新,cck表单将自动提交并显示感谢消息。 我为此搜索了很多,但没有找到任何解决方案。 请帮助我,我不知道如何做。您可以编写一个自定义模块,使用form\u alter hook。然后,对于您的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');
}
}
}