根据你描述的问题,电脑端支持邮箱登录而手机端异常,这是典型的模板兼容性问题。以下是排查及解决方案:
**一、核心排查步骤:**
1. **模板文件比对**
- 电脑端模板路径:/template/default/member/login.htm
- 手机端模板路径:/template/当前手机模板目录/member/login.htm
- 重点检查手机模板中是否存在以下代码片段:
- <input type="text" name="username" autocomplete="off"/>
复制代码
应更改为支持多登录方式:
- <input type="text" name="username" autocomplete="off" placeholder="用户名/邮箱/手机号"/>
复制代码
2. **表单提交验证检查**
检查手机模板表单的action地址是否为:
- <form method="post" autocomplete="off" action="member.php?mod=logging&action=login&loginsubmit=yes&handlekey=login">
复制代码
3. **移动端登录类型白名单**
检查后台设置:
- 全局设置 -> 功能设置 -> 登录设置 -> 允许的登录方式
复制代码
确保已勾选"邮箱登录"选项
**二、推荐解决方案:**
1. **通过DIY扩展登录字段(推荐)**
在手机模板的登录页模板文件中增加:
- <!--{if $_G['setting']['allowemailreg']}-->
- <input type="text" name="email" class="input_txt" placeholder="{lang login_email}" />
- <!--{/if}-->
复制代码
2. **强制启用多方式登录**
在手机模板的member/login.htm顶部添加:
- <?php
- $_G['setting']['allowemailreg'] = 1;
- $_G['setting']['allowmobilelogin'] = 1;
- ?>
复制代码
3. **兼容性JS修正**
在模板footer.htm中添加:
- $(function(){
- $('#loginform').attr('action', function(i, v){
- return v + '&logintype=auto';
- });
- });
复制代码
**三、深度优化建议:**
1. **创建手机端专用登录控制器**
新建文件 /source/plugin/mobilelogin/mobilelogin.class.php:
- class plugin_mobilelogin extends discuz_plugin {
- public function common(){
- if($_GET['mobile'] == 'yes'){
- C::t('common_setting')->update('allowemailreg',1);
- }
- }
- }
复制代码
2. **增加UA识别自动适配**
在source/function/function_login.php约第48行插入:
- if(strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false){
- $_GET['logintype'] = 'email';
- }
复制代码
**四、验证方案:**
1. 使用Chrome开发者工具,模拟移动端访问:
- // 控制台执行测试
- fetch('/member.php?mod=logging&action=login', {
- headers: {'User-Agent': 'Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36'}
- }).then(r=>r.text()).then(console.log)
复制代码
2. 检查返回的HTML中是否包含:
- <input type="hidden" name="logintype" value="email">
复制代码
通过以上专业级调试方案,可彻底解决移动端邮箱登录失效问题。建议优先采用模板层级的适配方案,其次考虑插件级扩展方案。如仍有异常,建议提供FTP权限进行深度代码审计。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |