Я новичок в Rails, я обычно в Express использую промежуточное ПО для получения user.id по декодированному JWT, это что-то вроде
/ middleware / jwt.js
const authentic = async (req, res, next) => {
const token = req.header("token");
if (!token) {
res.status(400).json({ error: "no token " });
} else {
try {
const decoded = verifyJwt(token);
const isAuth = await Person.findOne({ _id: decoded._id });
if (!isAuth) {
res.status(400).json({ error: `you are not authentic` });
} else {
// keys : _id, role, username
req.user = decoded;
next();
}
} catch (e) {
next(e);
}
}
};
export default authentic;
затем я использую его на маршрутах, app.use(authentic)
, чтобы я мог получать req.user.id
для каждого запроса, который я связывал или заполнял
в рельсах, как использовать промежуточное ПО и требовал, чтобы подлинное среднее получало current_user_id??так что я мог бы связать это с другими моделями, я использую рельсы только для API, я хотел бы получить некоторую реализацию для этого без каких-либо драгоценных камней, таких как devise
или других, просто используя JWT
здесь на рельсахдля JWT:
/ lib / json_web_token.rb
class JsonWebToken
class << self
def encode(payload, exp = 24.hours.from_now)
payload[:exp] = exp.to_i
JWT.encode(payload, Rails.application.secrets.secret_key_base)
end
def decode(token)
body = JWT.decode(token, Rails.application.secrets.secret_key_base)[0]
HashWithIndifferentAccess.new body
rescue
nil
end
end
end