swift中的自动登录功能
Posted
技术标签:
【中文标题】swift中的自动登录功能【英文标题】:Autologin functionality in swift 【发布时间】:2020-06-09 19:34:05 【问题描述】:我想实现自动登录功能。当我打开我的应用程序时,它将转到“loginViewController”。登录后,我将登录 ID 保存到 UserDefaults。如果 UserDefaults 具有该值,ift 将第二次转到“SlideMenuController”。我已经在“sceneDelegate”中编写了代码。代码是-
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)
if let logId = UserDefaults.standard.value(forKey: "loginId")
goToPlayerMenu()
guard let _ = (scene as? UIWindowScene) else return
func goToPlayerMenu()
let storyboard = UIStoryboard(name: "PlayerHomeScreen", bundle: nil)
let homeViewController = storyboard.instantiateViewController(withIdentifier: "PlayerHomeViewController") as! PlayerHomeViewController
let menuViewController = storyboard.instantiateViewController(withIdentifier: "PlayerMenuViewController") as! PlayerMenuViewController
let nvc: UINavigationController = UINavigationController(rootViewController: homeViewController)
nvc.navigationBar.barTintColor = UIColor.black
nvc.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
nvc.navigationItem.leftBarButtonItem?.tintColor = .white
nvc.navigationBar.tintColor = UIColor.black
//menuViewController.homeViewController = nvc
let slideMneu = SlideMenuController.init(mainViewController: nvc, leftMenuViewController: menuViewController)
slideMneu.delegate = homeViewController as? SlideMenuControllerDelegate
slideMneu.changeLeftViewWidth(UIScreen.main.bounds.width-40)
slideMneu.automaticallyAdjustsScrollViewInsets = true
self.window?.rootViewController = slideMneu
现在我想去登录视图控制器,如果我要注销应用程序。但由于我的 rootViewController 是“slideMneu”。我无法转到“loginViewController”。注销后是否有任何选项可以转到“loginViewController”?
我的注销功能是-
func logout()
UserDefaults.standard.removeObject(forKey: "customer_id")
UserDefaults.standard.removeObject(forKey: "isContributor")
FUser.logOutCurrentUser (logout) in
if logout == true
print("DEBUG: Logout completed")
let Alert = UIAlertController(title:Common.sharedInstance().TITLE_ALERT, message:Common.sharedInstance().CONFIRM_ALERT, preferredStyle: .alert)
let OKButtonAction = UIAlertAction(title: Common.sharedInstance().ALERT_YES, style: UIAlertAction.Style.default) (action:UIAlertAction!) in
let storyBoard = UIStoryboard(name: "Main", bundle: nil)
let LoginViewController = storyBoard.instantiateViewController(withIdentifier: "LoginViewController") as? LoginViewController
self.navigationController?.pushViewController(LoginViewController!, animated: true)
// self.navigationController?.popViewController(animated: true)
let Cancel = UIAlertAction(title:Common.sharedInstance().NO, style: .default, handler: nil)
Alert.addAction(OKButtonAction)
Alert.addAction(Cancel)
self.present(Alert, animated: true, completion:nil)
【问题讨论】:
【参考方案1】:所有代码均来自我的项目
1.Keywindow RootViewController 的设置位置
let navigator = Container.shared.resolve(INavigator.self)!
let localStorageService = Container.shared.resolve(ILocalStorageService.self)!
// if you store login user key or not
if localStorageService.isKeyExist(key: Configs.KEY_USER)
// if there is key,then goes to main page
navigator.switchRoot(keyWindow: window!, scene: .main(viewModel: MainTabBarViewModel()))
else
// there is no key,then goes to login page
navigator.switchRoot(keyWindow: window!, scene: .intro(viewModel: IntroViewModel()))
2.登录页面 通过调用Api,你可以从api获取一个token(key),这个token是后端开发者高度定制的。请将此token(key)保存在用户默认中。
3. 稍后当您需要在应用中调用某些授权 API 时,您将需要此令牌。
【讨论】:
【参考方案2】:您似乎缺少window
的初始化,可以这样修复:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)
guard let windowScene = (scene as? UIWindowScene) else return
window = UIWindow(windowScene: windowScene)
window?.makeKeyAndVisible()
if let logId = UserDefaults.standard.value(forKey: "loginId")
goToPlayerMenu()
【讨论】:
嗨@Frankenstein 注销后我想去“LoginViewController”。我已经编辑了我的问题。我添加了注销功能。请调查一下。 您最初的问题不是要设置rootViewController
吗?您不应该修改问题以提出新问题。如果您还有其他问题,最好创建一个新帖子并添加下面的链接,我一定会看看并帮助您。
不,我的问题是一样的。只有我添加了注销功能
我的问题是关于自动登录实现以上是关于swift中的自动登录功能的主要内容,如果未能解决你的问题,请参考以下文章
C# 使用webBrowser控件获取网页中的账号密码登录网页元素并自动填写模拟自动登录?