小编mat*_*mer的帖子

使用Angular.js和iOS客户端对Node.js应用程序进行身份验证

我试图尽可能多地阅读不同的答案和帖子,但我仍然不能满足于满足我需求的解决方案.我正在努力找出最好的(最有效的,但更安全的)方式来处理用户身份验证,登录等.

我有一个在Express上运行的Node.js服务器; 我有一个Angular.js网络应用程序; 我有一个iOS应用程序.我使用Express/Node.js公开了一个RESTful API.

饼干

我读到的第一件事说是使用cookie,并在服务器端(散列)和客户端(未散列)存储会话ID /登录令牌.客户端将使用每个请求传输此id,服务器将对其进行哈希处理,解析并相应地处理请求.这不会感觉RESTful(不是一个大问题),但更重要的是,我是否必须复制我的API:一个用于用户名/密码验证(例如通过curl完成)和一个用于基于cookie的验证(例如我的网络应用程序)?

另一个问题是:如果我有一个用户的多个连接,我会怎么做,例如他们登录了两个浏览器,一个iPhone和一个iPad.我的会话ID存储现在需要是一个数组吗?

HTTP Basic Auth

下一个想法是使用HTTP Basic Auth(使用SSL),这似乎很容易,但不推荐使用,因为您需要为每个请求传输用户名和密码.如果我使用HTTP Basic Auth进行操作,那么我是否会将用户名和密码存储在cookie(或HTML本地存储)中以允许"记住我"功能?或者我可以将两者结合起来:对实际请求使用HTTP Basic Auth(发布新帖子等),只使用存储在cookie中的会话ID进行初始登录顺序/记住我的方面?

传输会话ID比传输用户密码更安全吗?怎么样?会话ID将表面上作为密码,因此对我来说,传输它会产生与传输密码相同的安全问题.

所有平台似乎都支持Basic Auth,这是理想的选择.主要缺点似乎是需要随每个请求传输客户端身份验证数据.有没有办法缓解这个问题?

OAuth的

OAuth对我的需求似乎有些过分.我想我将无法使用curl命令来测试我的API.OAuth如何改进cookies方法?

你可能会说,我对可用的各种信息感到有些困惑,所以如果你有一套好的链接 - 适用于这种情况 - 我很乐意阅读它们.我正在尝试找到适合所有平台的解决方案,但仍然尽可能安全.此外,如果我的任何术语有错,请更正我,因为它会让我更容易搜索.

谢谢.

更新:

我一直在想这个问题,我有一个想法.如果这是愚蠢/不安全/任何反馈,请告诉我,因为我不确定它是否好.

当用户登录时,我们生成随机会话ID(盐渍等).此可选会话ID被发送到客户端,客户端可以选择存储(例如,在cookie中); 会话ID存储在数据库中.

然后,此会话ID可选地与每个请求一起作为HTTP身份验证标头或查询字符串发送,或者客户端可以根据需要发送用户名和密码(这为我们提供常规REST API).在服务器端,我们首先检查会话ID参数,如果它不存在,我们检查用户名/密码.如果两者都没有 - 错误.

在服务器上,我们检查会话ID是否与正确的用户名相关联.如果是,我们完成请求.

每次用户登录时,我们都会创建一个新的会话ID或删除当前的会话ID,并将其与响应一起发送给登录请求.

我认为这可以让我在适当的情况下使用常规REST API和Basic Auth,并维护会话/记住我的功能.它没有解决多个登录问题,但我认为应该这样做.请告诉我.

authentication node.js ios angularjs

20
推荐指数
1
解决办法
9670
查看次数

使用Swift添加项目和查询iOS Keychain

我无法将所有的Objective C代码示例可用于添加数据和查询从数据iOS Keychain斯威夫特.我正在尝试对字符串(访问令牌)进行基本存储并将其读回.我已经看过Stack Overflow上的其他一些问题,但我无法让它工作.我试图拼凑各种来源的解决方案.

编辑1:我尝试了一个更基本的设置,因为我认为我的self.defaultKeychainQuery可能搞砸了.我已将下面的代码更新为最新版本.

编辑2:搞定了.我没有正确地将数据值添加到保存查询中.我需要将字符串转换为NSData.我已将下面的代码更新为最新的工作版本.

编辑3:正如Xerxes在下面指出的那样,由于Dictionaries存在一些问题,此代码不适用于高于Beta 1的Xcode版本.如果你知道对此的修复,请告诉我.

更新:我把它变成了一个用Swift编写的一个名为Locksmith钥匙串库.


保存

class func save(service: NSString, data: NSString) {
  var dataFromString: NSData = data.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
  // Instantiate a new default keychain query
  var keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericPassword, service, userAccount, dataFromString], forKeys: [kSecClass, kSecAttrService, kSecAttrAccount, kSecValueData])

  // Delete any existing items
  SecItemDelete(keychainQuery as CFDictionaryRef)

  // Add the new keychain item
  var status: OSStatus = SecItemAdd(keychainQuery as …
Run Code Online (Sandbox Code Playgroud)

keychain local-storage ios swift

20
推荐指数
2
解决办法
3万
查看次数

kUTTypeURL undefined - 在Swift中使用未解析的标识符"kUTTypeURL"

我无法获得共享扩展程序.我的共享控制器中有以下内容.

let item: NSExtensionItem = self.extensionContext.inputItems[0] as NSExtensionItem
let itemProvider: NSItemProvider = item.attachments[0] as NSItemProvider
var URL: NSString
if itemProvider.hasItemConformingToTypeIdentifier(kUTTypeURL) {
  itemProvider.loadItemForTypeIdentifier(kUTTypeURL, options: nil, completionHandler:   {(url: NSURL, error: NSError) in
     URL = url.absoluteString
  })
}

self.extensionContext.completeRequestReturningItems(nil, completionHandler: nil)
Run Code Online (Sandbox Code Playgroud)

这给了我Use of unresolved identifier 'kUTTypeURL'线上的错误if itemProvider.hasItemConformingToTypeIdentifier(kUTTypeURL) {.

似乎被定义为Swift中的常量,但我似乎无法访问它.它是枚举的一部分吗?我是否必须导入一些内容才能访问它?

谢谢你的帮助.

ios swift ios8

20
推荐指数
1
解决办法
4399
查看次数

"此Mac的私钥未安装" - Xcode中的分发和配置文件

我已经尝试过查看其他答案,但是有很多不完整或冲突的信息,但是如果你有一个很好的链接.

当我尝试分发我的应用程序时,我收到此错误:

1

我尝试在developer.apple.com上创建一个新的分发配置文件,分别是证书,标识符和配置文件,但这些配置文件似乎都不起作用.

我有一个Time Machine备份,之前我做了一个干净安装的Mavericks升级,我还有一个代码保存到我的Dropbox中的文本文件(我不确定它是否是私钥 - 我怀疑它)看起来比如'df9a79 ...'大约有三十个字符.

我似乎无法找到正确的链接来指导我完成密钥创建,iTunes连接和developer.apple.com的整个过程.我以前做过这个 - 我目前只是想向App Store提交更新.

我的应用更新状态目前正在等待上传.

这是我的钥匙串:

2

3

4

我已经尝试删除重复项(例如第一个屏幕截图中的重复项),但这似乎没有帮助.如果您有任何建议或链接,我很乐意听到.

谢谢你的帮助.

iphone xcode ios

5
推荐指数
1
解决办法
2万
查看次数

绘制弧时,UIBezierPath和NSBezierPath会产生不同的结果

我有两段代码,其中一段完美无缺(iOS版本),另一段无法正常运行(Mac版本).我无法解决使用NSBezierPath而不是UIBezierPath的Mac版本的问题.

iOS版本

我有一段代码完全按照我在iOS上使用UIBezierPath的方式工作.这是代码:

let center = CGPoint(x: size.width / 2.0, y: size.height / 2.0)
let radius = size.width / 2.0
let startAngle = angle
let endAngle = 180.0 - startAngle

let bezierPath = UIBezierPath()
bezierPath.addArcWithCenter(center, radius: radius, startAngle: startAngle.radians, endAngle: endAngle.radians, clockwise: true)
println(bezierPath)
return bezierPath
Run Code Online (Sandbox Code Playgroud)

它产生以下输出

<UIBezierPath: 0x7fe348f82910; <MoveTo {42.677669529663689, 42.677669529663689}>,
<CurveTo {7.3223304703363148, 42.677669529663689} {32.914562235881945, 52.440776823445439} {17.085437764118062, 52.440776823445432}>
Run Code Online (Sandbox Code Playgroud)

并显示以下图像

正确的形状

Mac OS X版

这正是我想要的,除了它是iOS.我想将此代码翻译为OS X/Cocoa.这就是我想出来的

let center = CGPoint(x: size.width / 2.0, y: size.height / 2.0)
let radius = size.width …
Run Code Online (Sandbox Code Playgroud)

macos cocoa core-graphics ios

5
推荐指数
1
解决办法
1429
查看次数

在其他平移手势后告诉ScrollView滚动

我无法获得滚动视图(在表格视图中)滚动.基本上,我有一个if语句,用于检查水平移动是否大于垂直移动.如果是,则在单元格上执行平移手势.另外,我希望tableview能够正常滚动.我尝试过使用一些变体,self.scrollview.enabled = yes但我无法使用它.

它适用于水平平移手势,但我不能让它在else部分正确滚动.这是最相关的代码:(对不起,如果它很糟糕 - 我还是iOS/Objective C的新手).哦,如果你在代码提取中随机看到一个奇怪的'代码',请忽略它 - 我在格式化时遇到了一些问题而且我丢了一个字.

-(void)handlePan:(UIPanGestureRecognizer *)panGestureRecognizer
{
    CGPoint location = [panGestureRecognizer locationInView:_tableView];

    //Get the corresponding index path within the table view
    NSIndexPath *indexPath = [_tableView indexPathForRowAtPoint:location];
    TVTableCell *cell = [_tableView cellForRowAtIndexPath:indexPath];

    CGPoint translation = [panGestureRecognizer translationInView:cell];
    // Check for horizontal gesture
    if (fabsf(translation.x) > fabsf(translation.y)) {
        CGPoint originalCenter = cell.center;

        if (panGestureRecognizer.state == UIGestureRecognizerStateBegan) {
            NSLog(@"pan gesture started");
        }

        if (panGestureRecognizer.state == UIGestureRecognizerStateChanged) {
            // translate the center

            CGPoint translation = [panGestureRecognizer translationInView:self.view]; …
Run Code Online (Sandbox Code Playgroud)

iphone scrollview ipad ios

3
推荐指数
1
解决办法
5199
查看次数

HTML SVG 不绘图(适用于其他页面)

我正在使用 Javascript计算 apath和元素circle内的值svg。我可以将正确的 HTML 代码注入到 HTML 页面中,但没有绘制圆/svg。

这是 Javascript 注入到我的 HTML 中的内容

<svg>
  <circle cx="115" cy="110" r="50"></circle>
  <path d="M115,110 L115,0 A50,50 1 0,1 190,35 z"></path>
</svg>
Run Code Online (Sandbox Code Playgroud)

如果我将此代码复制并粘贴到另一个.html文件中并运行它,则会出现一个形状(不完全是圆形)。这不会发生在我的实际网页中。

如果我将上面的代码直接放在 html 文件中(即不使用 Javascript 函数动态计算和注入它),我可以让形状出现。

我正在使用 Angular.js,如果这有区别的话。

我不认为我的 Javascript 中存在错误,因为注入 html 页面的代码在其他地方也能工作,但如果有帮助,我可以发布我的 Javascript 代码。没有任何样式会阻止 SVG 出现。这几乎就像我需要告诉浏览器重新加载/重新绘制/重新解析 HTML,但我不确定。

谢谢你的帮助。

编辑:

这是我的 javascript 代码。

/*
<svg>
  <circle cx="115" cy="115" r="110"></circle>
  <path d="M115,115 L115,5 A110,110 1 0,1 190,35 z"></path>
</svg>
 */
Sector.prototype.draw = function() {
  // Create our …
Run Code Online (Sandbox Code Playgroud)

html javascript svg angularjs

2
推荐指数
1
解决办法
1406
查看次数

UIPanGestureRecognizer没有名为touchesBegan的成员

我正在尝试将UIPanGestureRecognizer子类化,我想我可能会做一些愚蠢的事情.我试图覆盖UIPanGestureRecognizer从UIGestureRecognizer继承的方法时遇到错误.

我有这个代码

class VPGesture: UIPanGestureRecognizer {
    override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!) {
        super.touchesBegan(touches, withEvent: event)
    }

    override func touchesMoved(touches: NSSet!, withEvent event: UIEvent!) {
        super.touchesMoved(touches, withEvent: event);
    }

    override func touchesEnded(touches: NSSet!, withEvent event: UIEvent!) {
        super.touchesEnded(touches, withEvent: event);
    }

    override func touchesCancelled(touches: NSSet!, withEvent event: UIEvent!) {
        super.touchesCancelled(touches, withEvent: event);
    }
}
Run Code Online (Sandbox Code Playgroud)

这产生了这些错误

在此输入图像描述

非常感谢您的帮助.

iphone cocoa-touch ios swift ios8

1
推荐指数
1
解决办法
899
查看次数