Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static func authenticate(credentials: Credentials) throws -> Auth.User {
- switch credentials {
- case let id as Identifier:
- guard let user = try User.find(id.id) else {
- throw Abort.custom(status: .forbidden, message: "Invalid user identifier.")
- }
- return user
- case let usernamePassword as UsernamePassword:
- let fetchedUser = try User.query().filter("username", usernamePassword.username).first()
- guard let user = fetchedUser else {
- throw Abort.custom(status: .networkAuthenticationRequired, message: "User does not exist")
- }
- if try BCrypt.verify(password: usernamePassword.password, matchesHash: fetchedUser!.password) {
- return user
- } else {
- throw Abort.custom(status: .networkAuthenticationRequired, message: "Invalid user name or password.")
- }
- case let credentials as FacebookAccount:
- if let existing = try DemoUser.query().filter("facebook_id", credentials.uniqueID).first() {
- user = existing
- } else {
- throw Abort.custom(status: .networkAuthenticationRequired, message: "User does not exist")
- }
- case let credentials as GoogleAccount:
- if let existing = try DemoUser.query().filter("google_id", credentials.uniqueID).first() {
- user = existing
- } else
- throw Abort.custom(status: .networkAuthenticationRequired, message: "User does not exist")
- }
- default:
- let type = type(of: credentials)
- throw Abort.custom(status: .forbidden, message: "Unsupported credential type: \(type).")
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement