iOS进阶_密码学(四.抽取登录网络请求的单例)

2023-10-27

登录业务逻辑完善
在网络开发中,一般会有一个单例负责所有的网络请求
将这个网络登录的部分代码抽取出来

  1. 新建一个”类”
  2. 复制方法
  3. 调整参数
  4. 测试登录能否成功运行

WTNetworkTools.h

#import <Foundation/Foundation.h>

@interface WTNetworkTools : NSObject
/** 账户 **/
@property(nonatomic,copy)NSString * username;
/** 密码 **/
@property(nonatomic,copy)NSString * password;

/**用户登录*/
-(void)login;

//单例
+(instancetype)shareNetworkTools;

@end

WTNetworkTools.m

#import "WTNetworkTools.h"
#import "NSString+Hash.h"
#import "SSKeychain.h"


#define WTLoginServiceName @"WTLoginServiceName"

@implementation WTNetworkTools

+(instancetype)shareNetworkTools{
    static id instance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[self alloc]init];
        //加载本地账户密码
        [instance loadUserInfo];
    });
    return instance;
}

//加载本地用户信息
-(void)loadUserInfo{
    //加载账号
    self.username = [[NSUserDefaults standardUserDefaults] stringForKey:@"WTLoginServiceName"];
    //找出所有的账号
    self.password = [SSKeychain passwordForService:WTLoginServiceName account:self.username];
}

//获取授权信息 -- 等待设备授权!!
-(NSString *)getKeyWithAccunt:(NSString *)accunt{
    //1.需要授权
    //2.直接返回密钥
    return @"WTKey";
}

//实现登录代码
-(void)login{
    //发请求给服务器 -- 验证
    NSString * user = self.username;
    //密码 明文的!!
    NSString * pwd = self.password;
    // 1. ------------- MD5 加密 --------------
    //    pwd = pwd.md5String;
    // 2. ------------- MD5 加盐 --------------
    //不足:盐是固定的!有人知道!!
    //    pwd = [pwd stringByAppendingString:salt].md5String;
    // 3. ------------- HMAC --------------
    // 在实际开发中,密钥来自于服务器!! 注册的时候!!
    NSString * key = nil;//通过钥匙串访问来获取这个key
    if (key == nil) {
        //1.发送网络请求!获取密钥!!
        //2.展示"小菊花!!!"
        key = [self getKeyWithAccunt:user];
        //展示等待授权页面!!

        //立刻马上保存这个KEY在本地!! -- 通过钥匙串访问!  
    }
    pwd = [pwd hmacMD5StringWithKey:key];

    NSLog(@"现在的密码是:%@",pwd);

    //模拟网络请求!!
    if( [self isLoginWithUserId:user PassWord:pwd]){
        //保存账号密码 明文账号--密码
        [self savePwdWithAccunt:self.username Pwd:self.password];
        NSLog(@"登录成功");
    }else{
        NSLog(@"登录失败");
    }
}

//模拟网络请求 :既然是网络请求..结果返回肯定是异步的!
- (BOOL)isLoginWithUserId:(NSString *)userid PassWord:(NSString *)passw{
    if ([userid isEqualToString:@"WTKey"] && [passw isEqualToString:@"e9cdab82d48dcd37af7734b6617357e6"]) {


        return YES;
    }else{

        return NO;
    }

}

//保存账号密码
-(void)savePwdWithAccunt:(NSString *)accunt Pwd:(NSString *)pwd{
    //保存账号
    [[NSUserDefaults standardUserDefaults] setObject:self.username forKey:@"WTLoginUserName"];
    //同步 -- 立刻马上保存!
    [[NSUserDefaults standardUserDefaults] synchronize];

    //保存密码
    if (accunt.length > 0 && pwd.length> 0) {
        /**
         *  参数
         *  1. 密码明文
         *  2. 服务,可以随便写,但是他是APP的一个标识,建议用BundleID
         *  3. 账号,用户名
         */
        [SSKeychain setPassword:pwd forService:WTLoginServiceName account:accunt];
    }
}
@end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS进阶_密码学(四.抽取登录网络请求的单例) 的相关文章

  • iOS进阶_密码学进阶(二.对称加密算法代码演练)

    对称加密算法代码演练 终端测试指令 DES ECB 加密 echo n hello openssl enc des ecb K 616263 nosalt base64 DES CBC 加密 echo n hello openssl enc
  • iOS架构师_观察者模式

    定义 观察者模式 有时又被称为模型 视图 View 模式 源 收听者 Listener 模式或从属者模式 一个目标物件管理所有相依于它的观察者物件 并且在它本身的状态改变时主动发出通知 这通常透过呼叫各观察者所提供的方法来实现 此种模式通常
  • iOS进阶_密码学(四.抽取登录网络请求的单例)

    登录业务逻辑完善 在网络开发中 一般会有一个单例负责所有的网络请求 将这个网络登录的部分代码抽取出来 新建一个 类 复制方法 调整参数 测试登录能否成功运行 WTNetworkTools h import
  • 遇到问题----shrio------shiro登录,多个项目session被覆盖问题---两个web项目会导致shiro的session污染

    情况 遇到问题 shrio shiro登录 多个项目session被覆盖问题 一个项目两个web模块会导致shiro的session污染 表现为 我在同一台机子上部署了两个都使用了shiro管理的web项目 它们的访问路径除了端口不一样 i
  • iOS进阶—Runtime基础

    iOS进阶 目录 GitHub参考 RunTime 基础 一个程序的执行过程 大概就是代码 gt 编译链接 gt 执行 C语言 import
  • iOS进阶_WebDav(五.WebDav的上传进度&多线程下载思路)

    WebDav的上传进度 import ViewController h interface ViewController
  • iOS架构-组件化(项目实战-项目首页架构)

    UI架构设计 设计模式 外观模式 代理模式 适配器模式 adapter 注意 一版本只是搭建结构 一 1 0 Tab搭建 二 1 1 新增UICollectionView 主页 gt 整体设计基于 gt UICollectionView 滑
  • iOS开发_HOOK

    我们在使用NSURLRequest时 传入请求地址URL 但是如果URL中有中文的话 我们会发现NSURLRequest的请求地址会报空 void viewDidLoad super viewDidLoad NSURL url NSURL
  • iOS进阶—Runtime源码解析:动态方法解析

    GitHub参考 PS 参考GitHub分享的objc runtime master代码 及Runtime003代码 iOS进阶 目录 接上文iOS进阶 Runtime源码解析 消息发送 查看Runtime源码 No implementat
  • iOS进阶_多线程(二.线程间的状态)

    ViewController m 004 NSThread状态 Created by mac on 2018 4 27 Copyright 2018年 mac All rights reserved import ViewControlle
  • iOS架构-组件化(Carthage管理工具)

    一 Carthage项目管理工具使用 Step 1 安装 更新Homebrew工具 1 usr bin ruby e curl fsSL https raw githubusercontent com Homebrew install ma
  • iOS架构师_SDWebImage源码分析

    1 对SDdemo的分析 针对SD的3 8 2版本进行分析 因为从git上面直接下载SD的源码 项目运行会报错 缺少libwebp这个库 我们下载3 8 2版本 运行 libwebp 是个webp的图片格式 属于谷歌的库 所以只能翻墙去国外
  • iOS自动化布局-AutoLayout约束优先级

    约束的优先级 AutoLayout添加的约束中也有优先级 Priority 优先级的数值1 1000 分为两种情况 一种情况是我们经常添加的各种约束 默认值1000 最大值 优先执行 条件允许的话系统会自动满足我们的约束需求 第二种就是固有
  • Jeesite 登录逻辑分析

    最近项目需求研究免登录进入jeesite系统 于是对jeesite的登录逻辑进行了研究 一 当用户从url访问jeesite系统时 首先会通过下面方法 RequestMapping value adminPath login method
  • iOS进阶_NSURLConnection(被弃用的原因:Connection的缺点)

    NSURLConnection下载 我们在前面的文章中介绍了MAC电脑搭建Apache服务器 在Sites文件夹中放置一个视频文件MVVM mp4 pbb 通过NSURLConnection进行下载 访问http localhost 我们可
  • RuoYi-Vue项目登录过期的实现

    登录逻辑 登录验证 param username 用户名 param password 密码 param code 验证码 param uuid 唯一标识 return 结果 public String login String usern
  • ios接入GameCenter登录

    iOS接入GameCenter登录很简单 首先 在target gt Capabilities中打开GameCenter配置 这里的内购 In App Purchase 是因为我需要接内购的SDK 所以我把这个 In App Purchas
  • iOS进阶_NSURLSession(二.断点续传)

    断点续传 从上一篇文章中 我们了解了使用NSURLSession进行文件下载 我们在其基础上继续探索NSURLSession的断点续传 在NSURLSession中 我们使用reumeData来存储下载的数据进度 import ViewCo
  • iOS进阶_kvc使用注意事项

    细节1 我们在项目中使用kvc 在设置model属性的时候 注意尽量不要使用基本数据类型 实例 数据模拟 注意age是null类型的 Person h import
  • iOS架构-组件化(项目框架搭建2)

    静态库引用静态库 如果像上图一样 直接在业务层组件引用数据层组件的文件 则会报错 因为组件之间没有建立引用关系 如下图 静态库如何引用Pods第三方库 拷贝Podfile文件到项目 打开终端执行pad install 直接引用Pod下面的Y

随机推荐

  • MySQL-多表查询

    一 表架构 student sid sname sage ssex 学生表 course cid cname tid 课程表 sc sid cid score 成绩表 teacher tid tname 教师表 二 建表sql语句 SET
  • STM32 进阶教程 1 - micropython 移植

    原文 https blog csdn net zhanglifu3601881 article details 91997528 前言 Python是一种解释型 面向对象 动态数据类型的高级程序设计语言 Python 是一个高层次的结合了解
  • 11.AOP之注解配置

    1 使用IDEA创建工程 2 引入项目使用的依赖
  • Spring静态注入

    原文链接 http blog csdn net chen1403876161 article details 53644024 spring静态注入的三种方式 说明 MongoFileOperationUtil是自己封装的一个Mongodb
  • [Synth 8-2543] port connections cannot be mixed ordered and named

    我也遇到了这个问题 卡了半天 刚自己解决了 给再发生这种状况的盆友们一点参考 Jakes uut clk clk we we T T cos1 cos1 sin1 sin1 cos2 cos2 sin2 sin2 cos3 cos3 sin
  • MII/MDIO接口详解

    本文主要分析MII RMII SMII 以及GMII RGMII SGMII接口的信号定义 及相关知识 同时本文也对RJ 45接口进行了总结 分析了在10 100模式下和1000M模式下的设计方法 MII接口提供了MAC与PHY之间 PHY
  • 纵表和横表的相互转换与自我理解

    纵表和横表的相互转换与自我理解 横表 纵表 结论 纵表转横表 横表转纵表 横表 优点 一行表示了一个实体记录 清晰可见 一目了然 缺点 如果现在要给这个表加一个字段 那么就必须重建表结构 纵表 优点 如果现在要给这个表加一个字段 只需要添加
  • 105套最新计算机专业毕业设计源码+数据库+论文

    最近又到了毕设期 很多计算机的同学都在忙着做毕设 可毕设总是遥遥无期 我身边的朋友也在忙自己的毕业设计程序 目前也是难产一样慢慢挤出来 很能感受到大家的痛苦 但是本科毕设程序还是挺简单的 市面上有大量几千套 上万套的参考 面对这么多资源 你
  • Eclipse工具启动提示the selection cannot be launched,and there are no recent

    误删了eclipse之后 发现了 jdk 64bit与eclipse 32bit位数不匹配 jdk配置环境不变 重新安装eclipse 方便 将eclipse zip解压到D Eclipse下 直接点击eclipse exe即可 安装过程可
  • 删除数组中的某个指定元素或数组对象<学习笔记>

    1 删除数组中的某个指定元素 let index this fileList indexOf filename if index gt 1 this fileList splice index 1 其中fileList为我的数组 我要找到f
  • Debian 10.x 网卡配置那些事儿

    Linux系统要上网 必然要学会对网卡进行配置 对于Redhat系 在 etc sysconfig network scripts 目录下的一大堆文件 要修改 你得一个一个文件来过 对于Debian系 不管你有多少张网卡 有线网卡还是无线网
  • CentOS7.2下SSL证书的配置

    HTTPS的配置 2017 07 28 准备 假设CentOS7 已经安装了Apache Web服务器 yum install mod ssl openssl 安装完毕后 会自动生成 etc httpd conf d ssl conf 文件
  • CSS Tricks各种动画效果

    CSS Tricks各种动画效果
  • MySQL的体系结构

    MySQL是由SQL接口 解析器 优化器 缓存 存储引擎组成的 MySQL体系结构可以分为四个层级 如图1所示 一 连接层 思想 为解决资源的频繁分配 释放所造成的的问题 为数据库连接建立一个 缓冲池 原理 预先在缓冲池中放入一定数量的连接
  • IP地址定位原理

    IP地址定位是一种通过IP地址来确定位置的技术 在互联网和移动网络的应用十分广泛 本文将介绍IP地址定位的原理和实现方式 IP地址定位原理 IP地址是Internet Protocol 简称IP 的缩写 是互联网上的一个地址标识符用于识别连
  • 面板phpMyAdmin不同版本和MySQL还有php版本的对应情况

    phpMyAdmin4 9 0 Current version compatible with PHP 5 5 to 7 3 and MySQL 5 5 and newer phpMyAdmin4 8 0 Older version com
  • matlab绘图legend遮挡曲线,matlab绘图中legend的终极用法

    持续更新 当前 20100108 仅作笔记 作者 keyflying legend有时候挺烦人的 尽管大多时候挺好用 基本数据 data rand 25 repmat 1 25 25 1 H plot data 基本用法 legend st
  • 手动编辑一个快捷卸载的bat文件

    1 首先建立一个空的XXX bat文件 2 编辑内容输入 echo off goto run run start control appwiz cpl 3 保存 实现效果打开后直接跳转卸载界面 方便快速操作卸载文件
  • Java学习笔记 面向对象(下)

    第六章 面向对象 下 1 this与super 2 构造方法的多态 3 抽象类 4 接口 interface 5 引用 6 类的其他相关内容 1 this与super this this 域变量和this 成员方法 明确表示用的是类的域变量
  • iOS进阶_密码学(四.抽取登录网络请求的单例)

    登录业务逻辑完善 在网络开发中 一般会有一个单例负责所有的网络请求 将这个网络登录的部分代码抽取出来 新建一个 类 复制方法 调整参数 测试登录能否成功运行 WTNetworkTools h import