Created
January 25, 2019 17:45
-
-
Save timbaev/7f0de7b73af771627af1c1d15c8c7964 to your computer and use it in GitHub Desktop.
Helper for JWT
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import JWT | |
class TokenHelpers { | |
/// Create payload for Access Token | |
fileprivate class func createPayload(from user: User) throws -> AccessTokenPayload { | |
if let id = user.id { | |
let payload = AccessTokenPayload(userID: id) | |
return payload | |
} else { | |
throw JWTError.payloadCreation | |
} | |
} | |
/// Create Access Token for user | |
class func createAccessToken(from user: User) throws -> String { | |
let payload = try TokenHelpers.createPayload(from: user) | |
let header = JWTConfig.header | |
let signer = JWTConfig.signer | |
let jwt = JWT<AccessTokenPayload>(header: header, payload: payload) | |
let tokenData = try signer.sign(jwt) | |
if let token = String(data: tokenData, encoding: .utf8) { | |
return token | |
} else { | |
throw JWTError.createJWT | |
} | |
} | |
/// Get expiration date of token | |
class func expiredDate(of token: String) throws -> Date { | |
let receivedJWT = try JWT<AccessTokenPayload>(from: token, verifiedUsing: JWTConfig.signer) | |
return receivedJWT.payload.expirationAt.value | |
} | |
/// Verify token is valid or not | |
class func verifyToken(_ token: String) throws { | |
do { | |
let _ = try JWT<AccessTokenPayload>(from: token, verifiedUsing: JWTConfig.signer) | |
} catch { | |
throw JWTError.verificationFailed | |
} | |
} | |
/// Get user ID from token | |
class func getUserID(fromPayloadOf token: String) throws -> Int { | |
do { | |
let receivedJWT = try JWT<AccessTokenPayload>(from: token, verifiedUsing: JWTConfig.signer) | |
let payload = receivedJWT.payload | |
return payload.userID | |
} catch { | |
throw JWTError.verificationFailed | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment