首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JWT令牌解码SwiftUI

JWT令牌解码SwiftUI
EN

Stack Overflow用户
提问于 2021-04-27 11:45:30
回答 1查看 410关注 0票数 0

我试图解码我的JWT令牌,并获得在我的视图中显示的信息。问题是,当我打印我的Jwt令牌时,我可以看到用户数据,但是当我从我的jwt令牌模型创建实例时,我无法获得数据,它没有显示anything.Where,我有错误的想法吗?

这个JWT令牌解码和模型

代码语言:javascript
复制
struct Token : Decodable {
    
    let jwtString : String = ApplicationVariables.token
    
    func getJwtToken(){
        do {
            
            let newJWT = try JWT<MyJWTClaims>(jwtString: jwtString)
            
            print("JWT TOKEN İS : \(newJWT.claims.data?.first_name)")
            
        } catch {
            
            print("ERROR!")
            
        }
    }
}

class MyJWTClaims : Claims,ObservableObject {
    
    @Published var data : JWTData?
    
}

class JWTData : ObservableObject,Codable {
    
    @Published var first_name : String?
    @Published var last_name : String?
    @Published var email : String?
    @Published var user_verified : Bool?
   
}

这就是我试图展示JwtToken数据的地方;

代码语言:javascript
复制
struct ProfileTopView : View {
    
    @ObservedObject var jwtTokenData = MyJWTClaims()
    
    var body: some View {
        
        ZStack{
            
            Image(uiImage: #imageLiteral(resourceName: "Rectangle 69"))
                .resizable()
                .frame(width: UIScreen.main.bounds.width * 1, height: UIScreen.main.bounds.height * 0.15, alignment: .center)
            
            Image(uiImage: #imageLiteral(resourceName: "Vector-8"))
                .resizable()
                .frame(width: UIScreen.main.bounds.width * 0.22, height: UIScreen.main.bounds.height * 0.10, alignment: .center)
                .offset(x: 0, y: UIScreen.main.bounds.height * 0.048)
            
            Text(jwtTokenData.data?.first_name ?? "Test")
                .font(.system(size: 14))
                .bold()
                .offset(x: 0, y: UIScreen.main.bounds.height * 0.14)
            
            
        }.ignoresSafeArea(.all)
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-27 12:37:55

您应该返回使用解码的结果填充的实例。在下面的代码中,我将直接返回初始化对象,您必须像已经在做的那样首先解码,然后填充值。

代码语言:javascript
复制
import SwiftUI

protocol Token {
    func getJwtToken() -> JWTData
    var jwtString:String{get set}
}

class TokenDecoder : Token {
    var jwtString: String = "myToken"
    var jwtObj:JWTData?
    
    func getJwtToken() -> JWTData{
        // Perform JWTdecoding and return object
        JWTData(first_name:"foo",last_name:"bar",email:"abc@xyz.com",user_verified:false)
    }
}

class MyJWTClaims : ObservableObject {
    
    @Published var data : JWTData?
    
    init(decoder:Token) {
        self.data = decoder.getJwtToken()
    }
    
}

struct JWTData:Decodable  {
    
    var first_name : String?
    var last_name : String?
    var email : String?
    var user_verified : Bool?
    
}

struct ProfileTopView : View {
    
    @ObservedObject var jwtTokenData = MyJWTClaims(decoder: TokenDecoder())
    
    var body: some View {
        
        ZStack{
            
            Image("CDF")
                .resizable()
                .frame(width: UIScreen.main.bounds.width * 1, height: UIScreen.main.bounds.height * 0.15, alignment: .center)
            
            Image("Home")
                .resizable()
                .frame(width: UIScreen.main.bounds.width * 0.22, height: UIScreen.main.bounds.height * 0.10, alignment: .center)
                .offset(x: 0, y: UIScreen.main.bounds.height * 0.048)
            
            Text(jwtTokenData.data?.first_name ?? "Test")
                .font(.system(size: 14))
                .bold()
                .offset(x: 0, y: UIScreen.main.bounds.height * 0.14)
            
            
        }.ignoresSafeArea(.all)
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67282437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档