jQuery Mobile 和 PhoneGap 中的身份验证

2024-05-27

我有一个使用 jQuery Mobile 和 PHP(CodeIgniter 框架)构建的 Web 应用程序。现在我正在尝试制作它的 PhoneGap 版本,以使其可以作为独立应用程序进行分发。但是,PHP Web 应用程序。版本使用 Ion Auth,一个 CodeIgniter 插件进行身份验证。因此,当您转到需要身份验证的页面时,应用程序会将您重定向到身份验证控制器登录方法。身份验证后,它会将您重定向回主页(本例中为 jQuery Mobile 页面)。这在网络应用程序中工作得很好,因为主页首先是由家庭控制器打开的。

但关键在于:在PhoneGap版本中,“主页”页面需要是PhoneGap中的index.html文件。显然,您可以通过在 PhoneGap.plist 中添加值来在启动时加载另一个 url,但这对于提交到应用程序商店来说是苹果不可接受的。如果我在身份验证中进行重定向,则身份验证后我无法返回到 index.html 文件...

那么,应该如何在 PhoneGap/jQuery Mobile 应用程序中进行身份验证呢?

UPDATE:

我已经根据答案之一尝试过此操作,但当我只想通过帖子登录并从方法返回一个值时,应用程序仍然尝试导航到帐户/登录页面(该页面不存在):

    $('#login_form').bind('submit', function () {
        event.preventDefault();
        //send a post request to your web-service
        $.post('http://localhost/app_xcode/account/login', $(this).serialize(), function (response) {
            //parse the response string into an object
            var response = response;
            //check if the authorization was successful or not
            if (response == true) {
                $.mobile.changePage('#toc', "slide");
            } else {
                alert('login failed');
                $.mobile.changePage('#toc', "slide");
            }
        });
    });

这是控制器方法:

function login()
    {
        //validate form input
        $this->form_validation->set_rules('identity', 'Identity', 'required');
        $this->form_validation->set_rules('password', 'Password', 'required');

        $base_url = $this->config->item('base_url');

        $mobile = $this->detect_mobile();
        if ($mobile === false && $base_url != 'http://localhost/app_xcode/') //Only restrict if not developing
            redirect('account/notAMobile');

        else if ($this->form_validation->run() == true) { //check to see if the user is logging in
            //check for "remember me"
            $remember = (bool)$this->input->post('remember');

            if ($this->ion_auth->login($this->input->post('identity'), $this->input->post('password'), $remember)) { //if the login is successful
                //redirect them back to the home page
                $this->session->set_flashdata('message', $this->ion_auth->messages());

                echo true;
                /*redirect($this->config->item('base_url'), 'refresh');*/
            }
            else
            { //if the login was un-successful
                //redirect them back to the login page
                $this->session->set_flashdata('message', $this->ion_auth->errors());
                /*redirect('account/login', 'refresh');*/ //use redirects instead of loading views for compatibility with MY_Controller libraries
            }
        }
        else
        { //the user is not logging in so display the login page
            //set the flash data error message if there is one
            $this->data['message'] = (validation_errors()) ? validation_errors()
                    : $this->session->flashdata('message');

            $this->data['identity'] = array('name' => 'identity',
                                            'id' => 'identity',
                                            'type' => 'text',
                                            'value' => $this->form_validation->set_value('identity'),
            );
            $this->data['password'] = array('name' => 'password',
                                            'id' => 'password',
                                            'type' => 'password',
            );

        }
    }

我想我已经删除或注释掉了那里的任何重定向。所以我不知道为什么它仍然尝试加载视图?这是否与 jQuery Mobile 尝试导航到那里有关,因为我发布到该 URL?


您的表单仍在提交并且尝试更改页面的原因是您的提交处理程序 Javascript 中存在语法错误。二号线,event未定义,因此尝试调用event.preventDefault()错误。尽管处理程序失败,浏览器仍然使用默认值提交表单action and method.

将您的函数签名更改为function(event) {或者简单地从函数中返回 false。返回false相当于防止违约。

$('#login_form').bind('submit', function () {

    //send a post request to your web-service
    $.post('http://localhost/app_xcode/account/login', $(this).serialize(), function (response) {
        //check if the authorization was successful or not
        if (response == true) {
            $.mobile.changePage('#toc', "slide");
        } else {
            alert('login failed');
            $.mobile.changePage('#toc', "slide");
        }
    }, 'JSON');

    return false;
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery Mobile 和 PhoneGap 中的身份验证 的相关文章

  • PhoneGap - 构建错误

    我对phonegap非常陌生 并尝试通过输入phonegap上描述的命令来创建一个简单的测试应用程序install http phonegap com install webpage 不幸的是 我在命令行中收到以下错误 BUILD FAIL
  • cordova 添加平台 - 执行命令“ant”时出错

    在一开始的时候 我知道这个问题已经被问了太多次了 我检查了所有的答案 尝试了我发现的每一种组合和每一种解决方案 但到目前为止没有任何效果对我有用 问题 我已经成功安装了cordova 从官方网站下载了它 并且我一直在遵循指南 我已经添加wp
  • HttpURLConnection 在 Android 2.x 中工作正常,但在 4.1 中不行:未发现身份验证挑战

    我有一些典型的代码 它们使用 HttpURLConnection 来获取带有 URL 的文件 它们在 android 1 x 和 2 x 中运行良好 但在Android 4 1中失败了 我在网上搜索了一下 但几乎没有找到类似的信息 有人愿意
  • 用一个命令更新 cordova 插件

    我想知道是否有更简单的方法来更新 cordova 插件 我用谷歌搜索 找到了一个钩子 2013年 但这不是100 我想要的 我知道我可以通过两个步骤来做到这一点 rm 然后添加 但我正在寻找更好的 官方 方法来帮助我哪些插件有更新的版本 我
  • Rails 身份验证插件推荐

    我想向我的 Rails 应用程序添加身份验证 我遇到了几个这样做的插件 acts as authenticated restful authentication Authlogic 等 我还没有看到一篇文章描述使用每种方法的差异 优点和缺点
  • Cordova 4.3.0 - 构建命令返回错误无法找到模块“Q”

    将 cordova 更新到版本 4 3 0 后 命令 cordova build 返回以下错误 module js 340 throw err Error Cannot find module Q at Function Module re
  • 在本地安全存储用于 Web 服务的密码

    我有一个应用程序 通过发送用户名和密码来对第三方 Web 服务进行身份验证 目前 我每次启动应用程序时都会在 winform 上输入密码 但我需要它自动登录 我想比更安全地存储用户名 密码 Dim username as String us
  • 具有 3 种状态日颜色的 jQuery 移动日历

    我正在考虑创建一个活动和预订系统 我找到了堆栈溢出问题jQuery 移动日期选择器控件 https stackoverflow com questions 5549729这表明jquery 移动日期框 https github com jt
  • 如何从命令行构建 apache cordova 项目?

    我已经在 Windows Cygwin 平台上设置了 apache cordova 我可以使用命令创建项目 cordova create
  • 从设备读取 ionic www/config.xml 文件

    我在从 Android 设备读取 www config xml 文件时遇到问题 我尝试了两种不同的方法 首先 我尝试使用另一个线程中推荐的 http 服务 当这不起作用时 我尝试使用 Cordova 文件插件 我这样做的原因是尝试从应用程序
  • PhoneGap/Cordova:如何使用cookies(iOS)?

    我有一个适用于 iOS 的 PhoneGap Corodova 项目 在 iOS 模拟器上构建时 我使用了 Jquery Cookies 它们很好 但是 既然我的设备上有该应用程序用于测试 它们就不再工作了 我猜这只是 iOS 不支持的东西
  • 如何将 ThreeJS 与 PhoneGap 一起使用?

    这个探索是非常自我描述的 我已经用一个简单的 3D 立方体进行了测试 它在浏览器中运行良好 但只在模拟器中显示空白页面 有人说 Threejs 不能与 PhoneGap 一起使用 但也有人说他们使用过并且工作正常 在 Android 中 您
  • 确定用于映射网络驱动器的域和用户名

    使用带有 SP1 的 Windows 7 Enterprise 但我希望得到适用于 Windows XP 2003 2008 Vista 7 的通用答案 从命令提示符处 我执行net use命令将 Z 驱动器映射到另一台计算机上的共享 但我
  • 在 React Native 应用程序中哪里可以获取 EXPO DEBUG 值?

    当我尝试登录 expo 时出现此错误 exp Set EXPO DEBUG true in your env to view the stack trace 你知道我到底要在哪里设置值吗EXPO DEBUG EXPO DEBUG是一个环境变
  • Docker Hub API v2 令牌身份验证问题

    目前 我正在开发一个非常轻量级版本的 Docker 容器编排器 并且我必须能够从公共 Docker Hub 注册表获取图像摘要 我想使用 Docker Registry API v2 来实现此目的 我正在尝试使用以下 API 调用获取授权令
  • 此错误消息“insertId: Error: INVALID_ACCESS_ERR: DOM Exception 15”的含义是什么?

    我正在使用 jquery mobile phonegap 和 openDatabase 开发一个应用程序 当应用程序执行时 我可以在 Safari 浏览器的控制台中看到SQL结果集与此消息 insertId Error INVALID AC
  • 来自 HTML5 的 Phonegap Bonjour/Zeroconf 或 Websocket IP 发现

    我正在尝试实现一个 Phonegap HTML5 应用程序 该应用程序连接到 Websocket 服务器 在嵌入式设备中运行 也有 Bonjour 服务 以在家庭网络内交换数据 我想知道使用 Phonegap 检测服务器 IP 的最佳方法
  • Asp.net Identity 注销其他用户

    我正在使用 Asp net Identity 来验证用户身份 并尝试从管理端锁定任何用户 但是当我锁定任何在线用户时 它并没有注销 我读过很多关于我的问题的评论 但它们都不起作用 我尝试使用 UserManager UpdateSecuri
  • 如何使用 Cordova 获取当前安装的应用程序的版本?

    我已经找到了应用程序可用性插件 https github com ohh2ahh AppAvailability它主要检查用户是否在其设备上安装了某个应用程序 是否有可能获得应用程序的当前版本 开发者名称 重要 以及所有可能的信息 一般来说
  • Phonegap Build 与 Xcode4 上的 Phonegap 对比?配置.xml?

    有一个使用phonegap构建的应用程序 我已经使用它编译和测试了http build phonegap com http build phonegap com服务 我发现它使用 XCode 的构建方式与在 Phonegap 网站上的构建方

随机推荐