Feathers使用JSON Web令牌进行身份验证。我如何有条件地设置令牌的In case of MySQL date: 2017-02-03
In case of MySQL datetime: 2017-02-03 10:24:34.0
属性取决于“记住我”是否被检查。
答案 0 :(得分:2)
更新了想法 :这种方法是一种黑客攻击(可能带来安全隐患) - 我认为应该发生的事情是如果你点击记住我,你应该是发出刷新令牌,该令牌应在用途到期或不存在时自动发出。我很想知道羽毛开发者有什么建议 - 我正在研究这个问题并会报告我是否找到了更好的解决方案
基于cookie的解决方案可能会发生的情况是,如果用户设置记住我,则会向他们发送带有失效日期的令牌,否则会向他们发出会话cookie,一旦浏览器会话结束,该会话cookie就会被删除(浏览器已关闭) )。当使用带有feathers.authentication
(< 1.x ??)的JSON Web令牌(JWT)时,我们将JSON Web令牌(JWT)存储在诸如localStorage
的存储提供程序中。如果您希望在浏览器关闭后登录令牌消失,则应使用sessionStorage
。
我当前的解决方案是同时使用两者,具体取决于我登录时的表单值。如果用户选择“记住我”,我会调用storage.setShouldPersist(true)
(同样storage.setShouldPesist(false)
如果记得我未检查)将在localstorage中放置一个标志,表示我们处于“localStorage”模式。我传递了一个对象,它将存储类型getItem
,setItem
等等)传递给feather.authentication
,它会检查我的记忆密钥是否存在。如果是,则使用localStorage
,否则使用sessionsStorage
。
以下是代码:
// localOrSessionStore.js
const { localStorage, sessionStorage } = global;
export default function localOrSessionStore({ key }) {
let shouldPersist = localStorage.getItem(key) === 't';
return {
setShouldPersist(persist) {
shouldPersist = !!persist;
if (persist) {
localStorage.setItem(key, 't');
} else {
localStorage.removeItem(key);
}
},
getItem(name) {
if (shouldPersist) {
return localStorage.getItem(name);
}
return sessionStorage.getItem(name);
},
setItem(name, value) {
if (shouldPersist) {
return localStorage.setItem(name, value);
}
return sessionStorage.setItem(name, value);
},
removeItem(name) {
if (shouldPersist) {
return localStorage.removeItem(name);
}
return sessionStorage.removeItem(name);
},
};
}
然后用法:
# feathers.js - where I set up feathers for my app
export const storage = localOrSessionStore({ key: 'myapprmbr' });
export default feathers()
.configure(rest('/api').fetch(fetch))
.configure(feathers.hooks())
.configure(feathers.authentication({
storage, // Passed into feathers-auth here
tokenKey: 'myappjwt',
});
新的feathers-authetication@>=1.x
和feathers-authetication-client
软件包有一些我还不熟悉的更改,可能会更好地记住我的功能。
答案 1 :(得分:1)
不记得JWT的方法不是将其存储在客户端。如果您使用带有身份验证的Feathers客户端,则令牌将以feathers-jwt
的形式存储在localStorage中。您可以通过调用
localStorage.removeItem('feathers-jwt')