我正在开发一个 Android 应用程序,该应用程序使用设备上可用的 Google 帐户对服务器端组件的用户进行身份验证。
我将 google 帐户名(gmail 地址)发送到服务器,但为了能够在服务器上使用 google 对其进行验证,我在 android 设备上请求一个 oauth token 并将其也发送到服务器。
问题是,虽然我不需要访问其他用户信息,但我必须使用打开确认对话框的 oauth 电子邮件范围。我不喜欢这个对话框,因为我要验证帐户名而不是访问用户信息。
还有AccountManager.getPassword(account) 但是我不喜欢交流,也不喜欢用用户密码。
也可以像网络应用一样使用 WebView 和验证用户身份(例如使用 OpenId),但它似乎不是设备上的最佳解决方案。
是否有任何其他/更好的方法来验证服务器上的设备帐户名称?
最佳答案
使用 AccountManager 或 Google Play 服务获取用户个人资料的 OAuth2 token (范围:https://www.googleapis.com/auth/userinfo.profile)。然后使用 Google 端点 (https://accounts.google.com/o/oauth2/tokeninfo) 对其进行验证,并可选择获取用户信息。此处提供了示例应用程序:http://oauthssodemo.appspot.com .您似乎在做类似的事情,如果是这样,这是正确的(或至少推荐的)方法。 顺便说一句,您无法获取用户密码,因为您没有使用与帐户提供者相同的证书进行签名。
执行此操作的唯一其他(可靠)方法是向用户发送一封带有随机 token 的电子邮件到他们的 GMail 地址,并让他们将其输入到应用程序中。这使您可以验证他们是否有权访问电子邮件,因此它必须是他们的(当然除非他们偷了别人的设备)。
或者您可以简单地相信,如果用户在他们的设备上注册了帐户,那确实是他们的帐户,因为他们在激活设备时至少进行了一次身份验证。然后您只需按原样使用 Gmail 地址,这对您的应用程序来说可能足够也可能不够。
关于Android:验证服务器上的设备谷歌帐户名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12743917/
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val
我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss
最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
我有一些非常大的模型,我必须将它们迁移到最新版本的Rails。这些模型有相当多的验证(User有大约50个验证)。是否可以将所有这些验证移动到另一个文件中?说app/models/validations/user_validations.rb。如果可以,有人可以提供示例吗? 最佳答案 您可以为此使用关注点:#app/models/validations/user_validations.rbrequire'active_support/concern'moduleUserValidationsextendActiveSupport:
当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested