- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 Swift 和 Vapor 完全陌生;
我正在尝试开发一个从我的 UserModel(Fluent Model 对象)调用的授权中间件,并且在所需的访问级别(int)和路径(字符串)和
import Vapor
public protocol Authorizable: Authenticatable {
associatedtype ProfileAccess: UserAuthorizable
}
/// status cached using `UserAuthorizable'
public protocol UserAuthorizable: Authorizable {
/// Session identifier type.
associatedtype AccessLevel: LosslessStringConvertible
/// Identifier identifier.
var accessLevel: AccessLevel { get }
}
extension Authorizable {
/// Basic middleware to redirect unauthenticated requests to the supplied path
///
/// - parameters:
/// - path: The path to redirect to if the request is not authenticated
public static func authorizeMiddleware(levelrequired: Int, path: String) -> Middleware {
return AuthorizeUserMiddleware<Self>(Self.self, levelrequired: levelrequired, path: path)
}
}
// Helper for creating authorization middleware.
///
//private final class AuthRedirectMiddleware<A>: Middleware
//where A: Authenticatable
final class AuthorizeUserMiddleware<A>: Middleware where A: Authorizable {
let levelrequired: Int
let path: String
let authLevel : Int
init(_ authorizableType: A.Type = A.self, levelrequired: Int, path: String) {
self.levelrequired = levelrequired
self.path = path
}
/// See Middleware.respond
public func respond(to req: Request, chainingTo next: Responder) -> EventLoopFuture<Response> {
if req.auth.has(A.self) {
print("--------")
print(path)
print(levelrequired)
**// print(A.ProfileAccess.AccessLevel) <- list line fails because the A.ProfileAccess.AccessLevel is a type not value**
print("--------")
}
return next.respond(to: req)
}
}
extension UserModel: Authorizable
{
typealias ProfileAccess = UserModel
}
extension UserModel: UserAuthorizable {
typealias AccessLevel = Int
var accessLevel: AccessLevel { self.userprofile! }
}
// setup the authentication process
let session = app.routes.grouped([
UserModelSessionAuthenticator(),
UserModelCredentialsAuthenticator(),
UserModel.authorizeMiddleware(levelrequired: 255, path: "/login"), // this will redirect the user when unauthenticted
UserModel.authRedirectMiddleware(path: "/login"), // this will redirect the user when unauthenticted
])
最佳答案
我使用 Vapor 4 方法来符合我的 User
型号到 ModelAuthenticatable
:
extension User:ModelAuthenticatable
{
static let usernameKey = \User.$email
static let passwordHashKey = \User.$password
func verify(password: String) throws -> Bool
{
try Bcrypt.verify(password, created:self.password)
}
}
request.auth.login(user)
Middleware
检查用户是否登录和“ super 用户”,如果是,则响应传递给下一个
Middleware
在链中,否则它会重定向到主页/登录页面,否则。
struct SuperUserMiddleware:Middleware
{
func respond(to request:Request, chainingTo next:Responder) -> EventLoopFuture<Response>
{
do
{
let user = try request.auth.require(User.self)
if user.superUser { return next.respond(to:request) }
}
catch {}
let redirect = request.redirect(to:"UNPRIVILEGED")
return request.eventLoop.makeSucceededFuture(redirect)
}
}
SuperUserMiddleware
并与
configure.swift
中的某些路由组一起使用作为:
app.middleware.use(SessionsMiddleware(session:MemorySessions(storage:MemorySessions.Storage())))
app.middleware.use(User.sessionAuthenticator(.mysql))
let superUserMW = SuperUserMiddleware()
let userAuthSessionsMW = User.authenticator()
let events = app.grouped("/events").grouped(userAuthSessionsMW, superUserMW)
try EventRoutes(events)
关于swift - Vapor 4/Swift : Middleware development,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62078573/
我正在尝试安装 webpymail ( https://code.google.com/p/webpymail/wiki/Installation ),我按照教程中的说明进行了所有操作,但是在启动该应
我已经创建了一个应该针对每个 请求运行的中间件,因此我将其添加到 Http\Kernel 的 $middleware 属性中。我还在这个中间件中使用了 Auth::check() ,所以我的中间件应该
我正在将使用 django_cms 的应用程序从一台服务器(一切正常)移动到另一台服务器,并在过去 4 小时内试图找出导致此错误的原因。非常欢迎提出建议! mod_wsgi (pid=21972):
示例代码可在 https://github.com/baumgarb/reverse-proxy-demo 上获得README.md 解释了如果您克隆存储库,如何重新产生问题。 我有一个 API 网关
长话短说,我有一个相当奇怪的路由场景,我需要在调用参数中间件之前调用中间件: router.param('foo', function (req, res, next, param) { // G
我在本地开发环境中没有这个问题,但我只是使用 nginx + gunicorn 部署了应用程序(第一次部署应用程序),每当我尝试发出请求时都会收到此回溯。 2012-01-21 22:24:36 [5
我在安装了 python 2.6.2 的 Ubuntu 9 上运行 Apache2。当我尝试访问 django 应用程序上的页面时出现以下错误: File "/usr/local/lib/python
我是 django 和 python 的新手,我试图在一段 django 代码上运行服务器,但我遇到了以下问题, Kinnovates-MacBook-Pro:platformsite Kinnova
我想澄清 config.ru 文件以指定 Rack 中间件,而不是使用 config.middleware 数组。 如果 config.ru 通常如下所示: require ::File.expand
我目前正在尝试用基于 express + webpack-middleware 的更强大的解决方案替换我使用 webpack-dev-server 的旧设置。所以我曾经像这样运行它:“webpack-
我开始使用带有 node/express 环境的 webpack 开发一个带有 react- 的 ReactJS 服务器端渲染应用程序路由器。我对每个 webpack 包在开发和生产(运行时)环境中的
我想为Guzzle写一个中间件它将特定的键添加到 form_params 并用值填充它。在我读过的文档中how to modify the headers但尚未找到有关 $request 对象其他属性
我目前正在研究各种中间件解决方案,这些解决方案将使我能够使用多种语言创建能够相互通信的应用程序。 ZeroC产品套件似乎是理想的选择,因为它提供了一种语言不可知的方式来定义数据和对数据进行操作的服务(
本文主要针对Golang的内置库 net/http 做了简单的扩展,通过添加中间件的形式实现了管道(Pipeline)模式,这样的好处是各模块之间是低耦合的,符合单一职责原则,可以很灵活的通过中间件
我有一个包含 url 的表单输入,我需要验证给定的 URL 没有被第 3 方 API 列入黑名单,我不确定是否需要使用 Middleware或创建特定表格 Request并在将该请求传递给命令之前验证
它说 The Slim Framework implements a version of the Rack protocol. As a result, a Slim application can
我想编写自己的中间件来检查当前用户是否是某个组的成员。如果是,用户可以移动到路由,如果不是,用户将被重定向到不同的页面。 我的中间件正在工作,但我不知道如何获取当前用户 ID。我试过 Auth::us
本文实例讲述了Django框架中间件(Middleware)用法。分享给大家供大家参考,具体如下: 1、面向切面编程 切点(钩子) 切点允许我们动态的在原有逻辑中插入一部分代码
我想做这样的事情: $app->mount('dashboard', new Travel\Controllers\Dashboard())->before(function() use ($app)
我正在尝试在我的reactjs应用程序中应用redux。由于这些错误,我无法继续: 我确信我已经安装了我需要的所有依赖项。这是我的 package.json 的相关部分 "dependencies":
我是一名优秀的程序员,十分优秀!