我在Laravel开始.我搜索并没有找到如何使用一些ENUM值验证数据.在下面的代码我需要的type只是DEFAULT或SOCIAL.一个或其他:
$validator = Validator::make(Input::only(['username', 'password', 'type']), [
'type' => '', // DEFAULT or SOCIAL values
'username' => 'required|min:6|max:255',
'password' => 'required|min:6|max:255'
]);
Run Code Online (Sandbox Code Playgroud)
有可能吗?
编辑:
阅读有关该错误的讨论:https://github.com/tymondesigns/jwt-auth/issues/83
我的原始问题:
我使用jwt-auth实现我的受保护资源,需要经过身份验证的用户使用以下代码:
Route::group(['middleware' => ['before' => 'jwt.auth', 'after' => 'jwt.refresh']], function() {
// Protected routes
});
Run Code Online (Sandbox Code Playgroud)
当用户在API上"登录"时,会创建一个授权令牌,并在响应授权头上发送给调用该资源的客户端应用程序.因此,客户端应用程序在拦截任何响应的标头上的授权令牌时,使用此标记值设置变量/会话/任何内容,以便在下一个请求时再次发送给API.
"登录"后对受保护资源的第一次请求工作正常,但是下一次客户端应用程序向API请求刷新令牌,会出现以下错误(API以json格式挂载所有响应):
{
"error": "token_invalid"
}
Run Code Online (Sandbox Code Playgroud)
刷新令牌会发生什么?我的刷新令牌实现(设置为后中间件)是错误的?或者没有必要手动刷新客户端应用程序请求附带的所有授权令牌?
更新:
我在这里建议更新jwt-auth RefreshToken中间件,但是token_invalid坚持.
BUG:
我想我发现了会发生什么.请注意,在刷新方法中,旧令牌被添加到启用的黑名单缓存案例中:
// Tymon\JWTAuth\JWTManager
public function refresh(Token $token)
{
$payload = $this->decode($token);
if ($this->blacklistEnabled) {
// invalidate old token
$this->blacklist->add($payload);
}
// return the new token
return $this->encode(
$this->payloadFactory->setRefreshFlow()->make([
'sub' => $payload['sub'],
'iat' => $payload['iat']
])
);
}
Run Code Online (Sandbox Code Playgroud)
请注意,除了黑名单方法,密钥是来自旧令牌有效负载的jti参数:
// Tymon\JWTAuth\Blacklist
public function …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Guzzle,但是我遇到了以下致命错误:
致命错误:第13行的/var/www/myapp/vendor/guzzlehttp/guzzle/src/functions.php中找不到类'GuzzleHttp\ClientInterface'
我正在使用composer autoloader进行自动加载:
require 'vendor/autoload.php';
use Guzzle\Http\Client;
$client = new Client();
$requests = Array(
$client->createRequest('GET', 'ams1.myapp.com:8080/api/ffmpeg_make_snapshots.php'),
$client->createRequest('GET', 'ams2.myapp.com:8080/api/ffmpeg_make_snapshots.php'),
$client->createRequest('GET', 'ams3.myapp.com:8080/api/ffmpeg_make_snapshots.php')
);
$client->sendAll($requests);
Run Code Online (Sandbox Code Playgroud)
怎么了?
编辑
我的composer.json:
{
"require": {
"guzzlehttp/guzzle": "~4"
}
}
Run Code Online (Sandbox Code Playgroud)
编辑2
我的composer.lock
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
],
"hash": "33c003b6e3e2dc0144146f9b652a6719",
"packages": [
{
"name": "guzzlehttp/guzzle",
"version": "4.0.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
"reference": "4063f08ca434efac12bf7a3db0d370b1c451345b"
},
"dist": { …Run Code Online (Sandbox Code Playgroud) 我使用jwt-auth在我的API中创建RESTful auth资源.当客户端应用程序调用登录资源时,将记录案例用户,您的当前令牌必须无效,因此会生成新令牌.
但是当前令牌被列入黑名单的情况下TokenBlacklistedException被抛出.
如何验证令牌是否被列入黑名单?或者如何纠正实施用户"注销"?我尝试在jwt-auth API源上找到但不存在一个getToken()->isBlacklisted()或一个parseToken()->isBlacklisted()验证器来实现它.
永久令牌无效parseToken()抛出TokenBlacklistedException,因此isBlacklisted方法是在令牌无效之前验证令牌是否有效的好方法.
信息:
波纹管代码验证有效负载是否无效,抛出TokenBlacklistedExceptionif无效:
if(
false === \Tymon\JWTAuth\Blacklist::has(
\Tymon\JWTAuth\Facades\JWTAuth::getPayload($token)
)
) {
\Tymon\JWTAuth\Facades\JWTAuth::parseToken()->invalidate();
}
Run Code Online (Sandbox Code Playgroud)
如何验证如下:
if(false ===\Tymon\JWTAuth\Facades\JWTAuth::parseToken()->isBlacklisted()) {
// invalidate...
}
Run Code Online (Sandbox Code Playgroud) 如何验证<select>这是一个动态数组?像这样:
<select class="escolhaVidro id_material" name="id_material[]" id="id_material">
Run Code Online (Sandbox Code Playgroud)
澄清:这是<select>由PHP动态组装的,所以我不知道索引是什么,所以这种方式是不可能的:
$(this).validate({
rules: {
"id_material[index]" : {
required : true
}
}
});
Run Code Online (Sandbox Code Playgroud)
奇怪的是这个插件不起作用:
$(this).validate({
rules: {
id_material : {
required : true
}
}
});
Run Code Online (Sandbox Code Playgroud)
我还试图用一个CSS class required中<select>,但没有好.
我正在使用s3 sdk上传一个字符串(将更改为txt文件).可以使用sdk.但由于sdk仅适用于新浏览器(例如:ie10 +),我需要以其他方式上传我的文件(对于旧浏览器)
对于图像文件,我使用输入(类型文件)和上传表单
<form id="urlform" enctype="multipart/form-data" method="post" target="upload_target" class="inline">
<input type="hidden" name="key" value="{{$parent.keyurl}}">
<input type="hidden" name="acl" value="public-read">
<input type="hidden" name="AWSAccessKeyId" value="{{$parent.awSAccessKeyIdUrl}}">
<input type="hidden" name="success_action_redirect" value="{{$parent.redirectionUrl}}">
<input type="hidden" name="x-amz-meta-filename" value="{{$parent.filenameurl}}">
<input type="hidden" name="policy" value="{{$parent.policyurl}}">
<input type="hidden" name="signature" value="{{$parent.signatureurl}}">
<input type="hidden" name="x-amz-security-token" value="{{$parent.urlSessionToken}}">
<div>
<label>
</label>
<input type="file" name="file" id="urlfileinput">
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
此解决方案仅适用于输入类型文件.
出于安全原因,我无法使用jquery更改输入的值.
是否有其他方式上传文本(使用其余api)?
我正在尝试使用Laravel 5.0进行密码提醒,我的user表在config/auth.php中设置为正确的表格,但是该表没有字段电子邮件,因为在我的业务用户名中比电子邮件更适合成为用户的电子邮件属性.
所以,当我尝试调用POST /密码/用户名时(在我的情况下,我需要在我的PasswordController中创建一个postUsername方法,使用ResetsPasswords,trait因为我有一个用户名而不是电子邮件,我不能将用户名字段重命名为电子邮件) ,我得到以下mysql错误:
Column not found: 1054 Unknown column 'email' in 'where clause' (SQL: select * from用户where邮箱= email@email.com limit 1
如何在Laravel 5.0中更改密码提醒的默认行为以使用用户名字段而不是电子邮件字段?
我尝试使用mutator(setter)和accessor(getter)方法来发送电子邮件但不工作,这样:
<?php
// class User extends Model implements AuthenticatableContract, CanResetPasswordContract...
public function getEmail() {
return $this->username;
}
public function setEmail($email) {
return $this->username = $email;
}
Run Code Online (Sandbox Code Playgroud) 如何使用PHP为每个密码实现一个用于存储和比较2048位哈希值的密码的算法?
编辑1:
我想我的问题不够清楚.我的意思是我不会制作加密算法.但是如何存储密码和盐.作为每个密码的随机盐.那么,将盐和密码一起存储在数据库中是不明智的.
编辑2:
那会是一个好方法吗?
1)用户输入密码,
2)系统生成密码的哈希值,
3)系统为此盐生成密码(我用time()?)
作为随机盐,如何以及在哪里可以将盐存储到密码?请,我不想将盐与密码一起存储,因为我认为这不太确定.
因此,在用户登录后存储的密码和相同的盐之后,我将获得与盐一起存储的密码哈希值,并将其与保存的盐提供的密码的哈希值进行比较.
在哪里保存盐?这样做是一个很好的方法吗?