登录逻辑的完善
This commit is contained in:
@@ -38,6 +38,7 @@
|
||||
E8D15AA32B89B03D00369467 /* Deserialized.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D15AA22B89B03D00369467 /* Deserialized.swift */; };
|
||||
E8D15AA62B89B0C600369467 /* List+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D15AA52B89B0C600369467 /* List+.swift */; };
|
||||
E8D15AA82B89B74700369467 /* YMRequestX.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D15AA72B89B74700369467 /* YMRequestX.swift */; };
|
||||
E8D15AAA2B8ACC6B00369467 /* YMNetworkFun.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D15AA92B8ACC6B00369467 /* YMNetworkFun.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
@@ -79,6 +80,7 @@
|
||||
E8D15AA22B89B03D00369467 /* Deserialized.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Deserialized.swift; sourceTree = "<group>"; };
|
||||
E8D15AA52B89B0C600369467 /* List+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "List+.swift"; sourceTree = "<group>"; };
|
||||
E8D15AA72B89B74700369467 /* YMRequestX.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YMRequestX.swift; sourceTree = "<group>"; };
|
||||
E8D15AA92B8ACC6B00369467 /* YMNetworkFun.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YMNetworkFun.swift; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@@ -281,6 +283,7 @@
|
||||
E8D15AA72B89B74700369467 /* YMRequestX.swift */,
|
||||
E8D15AA22B89B03D00369467 /* Deserialized.swift */,
|
||||
E8D15A9C2B899E1500369467 /* YMNetworkHelper.swift */,
|
||||
E8D15AA92B8ACC6B00369467 /* YMNetworkFun.swift */,
|
||||
);
|
||||
path = Request;
|
||||
sourceTree = "<group>";
|
||||
@@ -435,6 +438,7 @@
|
||||
E86A43C32B8628AF0084C04D /* BaeTabBarViewController.swift in Sources */,
|
||||
E86A43AA2B85DFA90084C04D /* BaseViewController.swift in Sources */,
|
||||
E884E85F2B6900C500ADE6EE /* AppDelegate.swift in Sources */,
|
||||
E8D15AAA2B8ACC6B00369467 /* YMNetworkFun.swift in Sources */,
|
||||
E86A43B82B85F0B80084C04D /* AuthLaunchVC.swift in Sources */,
|
||||
E86A43C82B8743EA0084C04D /* AuthFillDataVC.swift in Sources */,
|
||||
E86A43CD2B874C8E0084C04D /* BaseView.swift in Sources */,
|
||||
|
Binary file not shown.
@@ -36,5 +36,21 @@
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
</BreakpointProxy>
|
||||
<BreakpointProxy
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||
<BreakpointContent
|
||||
uuid = "6787B753-80F5-44DC-975E-E75B8C595115"
|
||||
shouldBeEnabled = "Yes"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "yinmeng-ios/Modules/Auth/VM/AuthViewModel.swift"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "54"
|
||||
endingLineNumber = "54"
|
||||
landmarkName = "tokenTransformTicket(accesToken:)"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
</BreakpointProxy>
|
||||
</Breakpoints>
|
||||
</Bucket>
|
||||
|
@@ -7,6 +7,7 @@
|
||||
|
||||
import UIKit
|
||||
import DeviceKit
|
||||
import NSObject_Rx
|
||||
@main
|
||||
class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
var window: UIWindow?
|
||||
@@ -17,10 +18,30 @@ var window: UIWindow?
|
||||
self.window = UIWindow.init(frame: UIScreen.main.bounds)
|
||||
self.window?.backgroundColor = UIColor.white
|
||||
self.window?.rootViewController = BaseNavigationViewController(rootViewController:AuthLoginVC())
|
||||
|
||||
loginStateListener()
|
||||
return true
|
||||
}
|
||||
|
||||
private func loginStateListener() {
|
||||
AuthViewModel.authVM.loginSuccess.subscribe(onNext: { result in
|
||||
print("是否登录成功\(result)")
|
||||
if result == true {
|
||||
///如果登录成功显示tabbar
|
||||
self.window = UIWindow.init(frame: UIScreen.main.bounds)
|
||||
self.window?.backgroundColor = UIColor.white
|
||||
self.window?.rootViewController = BaeTabBarViewController()
|
||||
} else {
|
||||
///去登录
|
||||
self.window = UIWindow.init(frame: UIScreen.main.bounds)
|
||||
self.window?.backgroundColor = UIColor.white
|
||||
self.window?.rootViewController = BaseNavigationViewController(rootViewController:AuthLoginVC())
|
||||
}
|
||||
}).disposed(by: rx.disposeBag)
|
||||
///检车是否已经登录
|
||||
AuthViewModel.authVM.checkUserIsLogin()
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@@ -31,7 +31,7 @@ class HUDTool: NSObject {
|
||||
- Parameter afterDelay: 延迟消失时间
|
||||
- Parameter enabled: 是否可以拦截事件 no:不拦截 yes:拦截
|
||||
*/
|
||||
class func showSuccess(with message: String, in view: UIView? = YMRequestX.topViewController()?.view, delay afterDelay: TimeInterval = kDelayTime, enabled: Bool = true, icon:String = "") {
|
||||
class func show(with message: String, in view: UIView? = YMRequestX.topViewController()?.view, delay afterDelay: TimeInterval = kDelayTime, enabled: Bool = true, icon:String = "") {
|
||||
if message.isEmpty { return }
|
||||
|
||||
DispatchQueue.main.async {
|
||||
|
17
yinmeng-ios/Base/Request/YMNetworkFun.swift
Normal file
17
yinmeng-ios/Base/Request/YMNetworkFun.swift
Normal file
@@ -0,0 +1,17 @@
|
||||
//
|
||||
// YMNetworkFun.swift
|
||||
// yinmeng-ios
|
||||
//
|
||||
// Created by MaiMang on 2024/2/25.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
|
||||
func RequestGet(path:String,parma:Dictionary<String, Any>, succeed: SessionCallSucceed?,fail:SessionCallFail?) -> Void {
|
||||
YMNetworkHelper.share.requestSend(type: .get, path: path, params: parma, succeed: succeed, fail: fail)
|
||||
}
|
||||
|
||||
func RequestPost(path:String,parma:Dictionary<String, Any>, succeed: SessionCallSucceed? ,fail:SessionCallFail?) -> Void {
|
||||
YMNetworkHelper.share.requestSend(type: .post, path: path, params: parma, succeed: succeed, fail: fail)
|
||||
}
|
@@ -21,6 +21,7 @@ class AuthLoginVC: BaseViewController, HiddenNavigationBarProtocol {
|
||||
loadSubViews()
|
||||
viewModel.data.subscribe(onNext: { [weak self] success in
|
||||
if success {
|
||||
HUDTool.show(with: "验证码已发送\n+86\(self?.phone ?? "")")
|
||||
self?.startCountdown()
|
||||
}
|
||||
}).disposed(by: rx.disposeBag)
|
||||
@@ -389,7 +390,7 @@ extension AuthLoginVC {
|
||||
if phone.count > 0 {
|
||||
viewModel.getSmsCode(phone: phone, type: 1)
|
||||
} else {
|
||||
HUDTool.showSuccess(with: "请输入正确的手机号码")
|
||||
HUDTool.show(with: "请输入正确的手机号码")
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -34,12 +34,22 @@ class LoginTokenConfig: NSObject {
|
||||
}
|
||||
}
|
||||
|
||||
func removeTokenFromLocaltion() {
|
||||
self.tokenInfo = nil
|
||||
UserDefaults.standard.removeObject(forKey: UserTokenKey)
|
||||
}
|
||||
|
||||
func saveTicketToLoaction(ticket:String) {
|
||||
self.ticket = ticket
|
||||
UserDefaults.standard.setValue(ticket, forKey: UserTicketKey)
|
||||
UserDefaults.standard.synchronize()
|
||||
}
|
||||
|
||||
func removeTicketFromLoaction() {
|
||||
self.ticket = ""
|
||||
UserDefaults.standard.removeObject(forKey: UserTicketKey)
|
||||
}
|
||||
|
||||
func getTicket() -> String {
|
||||
if let ticket = self.ticket {
|
||||
return ticket
|
||||
|
@@ -8,21 +8,71 @@
|
||||
import Foundation
|
||||
import RxSwift
|
||||
class AuthViewModel: NSObject {
|
||||
|
||||
static let authVM = AuthViewModel.init()
|
||||
let data = PublishSubject<Bool>()
|
||||
let token = PublishSubject<UserTokenObject?>()
|
||||
let loginSuccess = PublishSubject<Bool>()
|
||||
|
||||
func getSmsCode(phone:String, type:Int) {
|
||||
if let phoneDes = phone.encrypt() {
|
||||
let params:[String: Any] = ["mobile":phoneDes, "type":type]
|
||||
YMNetworkHelper.share.requestSend(type: .post, path: "sms/getCode", params: params, succeed: { data in
|
||||
RequestPost(path: "sms/getCode", parma: params) { data in
|
||||
self.data.onNext(true)
|
||||
}, fail: { code, msg in
|
||||
self.data.onNext(false)
|
||||
})
|
||||
} fail: { code, message in
|
||||
self.data.onNext(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func authPhoneCode(phone:String, code:String) {
|
||||
if let phoneDes = phone.encrypt() {
|
||||
let params = ["phone":phoneDes, "code":code, "client_secret":"uyzjdhds", "version":"1", "client_id":"erban-client", "grant_type":"password"]
|
||||
RequestPost(path: "oauth/token", parma: params) { data in
|
||||
if let account = Deserialized<UserTokenObject>.toModel(with: data) {
|
||||
LoginTokenConfig.config.saveTokenToLocaltion(token: account)
|
||||
self.token.onNext(account)
|
||||
self.token.onCompleted()
|
||||
///进行token的置换
|
||||
if let accessToken = account.access_token {
|
||||
self.tokenTransformTicket(accesToken: accessToken)
|
||||
}
|
||||
}
|
||||
} fail: { code, data in
|
||||
self.token.onNext(nil)
|
||||
self.token.onCompleted()
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
///通过token获取ticket
|
||||
func tokenTransformTicket(accesToken:String) {
|
||||
let params = ["access_token": accesToken, "issue_type": "multi"]
|
||||
RequestPost(path: "oauth/ticket", parma: params) { data in
|
||||
///登录成功
|
||||
if let dic = data as? [String: Any], let tickets = dic["tickets"] as? [[String: Any]], let ticket1 = tickets[safe: 0], let ticket = ticket1["ticket"] as? String{
|
||||
LoginTokenConfig.config.saveTicketToLoaction(ticket: ticket)
|
||||
self.loginSuccess.onNext(true)
|
||||
} else {
|
||||
self.loginSuccess.onNext(false)
|
||||
}
|
||||
} fail: { code, message in
|
||||
self.loginSuccess.onNext(false)
|
||||
}
|
||||
}
|
||||
|
||||
func checkUserIsLogin() {
|
||||
if let account = LoginTokenConfig.config.getAccountInfo(), let token = account.access_token {
|
||||
let ticket = AuthManager.ticket
|
||||
if ticket.count > 0 {
|
||||
///如果内容都有的话 就是直接登录
|
||||
self.loginSuccess.onNext(true)
|
||||
} else {
|
||||
/// 如果没有ticket的话 去置换ticket
|
||||
tokenTransformTicket(accesToken: token)
|
||||
}
|
||||
} else {
|
||||
self.loginSuccess.onNext(false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -13,3 +13,8 @@ struct UserTokenObject: HandyJSON, Codable {
|
||||
var netEaseToken:String? = ""
|
||||
var access_token:String? = ""
|
||||
}
|
||||
|
||||
struct UserTicketObject: HandyJSON {
|
||||
var tickets:[[String: Any]]?
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user