当我按下登录后,设置电子邮件和密码,它只是眨眼,其他什么都没有发生。我有一个带有Oauth2登录的大型护照系统。
这是一个正常工作的系统,但在V.5.3:https://test.webshooter.se中,在Laravel 7系统中,我可以做任何事情,比如显示竞赛、地图、注册用户、重置密码、收发电子邮件,但无法登录。到目前为止,我已经以这样一种方式对用户进行了身份验证,即在数据库中为单击的每个登录注册oauth_refresh_tokens和oauth_access_tokens。
以下是登录刀片:
<div class="row">
<div class="col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4">
<div class="panel panel-primary">
<div class="panel-heading">
{{_('Logga in')}}
</div>
<div class="panel-body">
<div ng-class="{'hide': loggingIn}">
<div class="form-group">
<input type="text" name="email" ng-model="auth.email" id="email" class="form-control" placeholder="{{_('E-postadress')}}" ng-enter="login();" autofocus>
</div>
<div class="form-group">
<input type="password" name="password" ng-model="auth.password" class="form-control" placeholder="{{_('Lösenord')}}" ng-enter="login();">
</div>
<a class="btn btn-success btn-block" ng-click="login();" ng-class="{'disabled': loggingIn}">{{_('LOGIN')}}</a>
<div class="row margin-top-20">
<div class="col-sm-12 text-center">
<a ui-sref="auth.password">{{_('Glömt ditt lösenord?')}}</a>
</div>
</div>
<div class="row margin-top-20">
<div class="col-sm-12 text-center">
<a ui-sref="auth.register">{{_('Inget konto? Registrera dig')}} »</a>
</div>
</div>
</div>
<div class="hide text-center text-muted" ng-class="{show: loggingIn}">
<i class="fa fa-2x fa-spinner fa-spin"></i>
<p>{{_('LOGGING IN')}}</p>
</div>
</div>
</div>
</div>
</div>
<script>$('#email').focus();</script>这是AuthenticateController的一部分:
<?php
namespace App\Http\Controllers\Api;
use App\Jobs\SendActivationEmail;
use App\Http\Controllers\Controller;
use App\Models\User;
use App\Models\UserInvite;
use JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
use App\Http\Requests;
use Illuminate\Http\Request;
class AuthenticateController extends Controller
{
/**
* @param Request $request
*
* @return \Illuminate\Http\JsonResponse
*/
public function authenticate(Request $request)
{
$credentials = $request->only('email', 'password');
try {
// verify the credentials and create a token for the user
if (! $token = \JWTAuth::attempt($credentials)) {
return response()->json(['error' => 'invalid_credentials', 'message' => _('Vänligen kontrollera ditt användarnamn och/eller lösenord.')], 401);
} elseif (JWTAuth::toUser($token)->activation_code && JWTAuth::toUser($token)->created_at < date('Y-m-d H:i:s', strtotime('-2 weeks'))) {
return response()->json(['error' => 'user_inactive', 'message' => _('Din e-postadress har inte aktiverats ännu. Du bör ha ett e-postmeddelande innehållande en aktiveringslänk.')], 401);
} elseif (JWTAuth::toUser($token)->deleted_at) {
return response()->json(['error' => 'user_deleted', 'message' => _('Ditt konto har inaktiverats. Ta kontakt med vår kundsupport om du vill återaktivera ditt konto.')], 401);
}
} catch (JWTException $e) {
// something went wrong
return response()->json(['error' => 'could_not_create_token', 'message' => _('Någonting verkar ha gått ha fel. Prova gärna igen.')], 500);
}
$user = \Auth::user();
// if no errors are encountered we can return a JWT
return response()->json(compact('token','user'));
}
public function updatePassword(Requests\PasswordRequest $request)
{
$user = \Auth::user();
if(\Hash::check($request->get('password'), $user->password)):
return response()->json(['message'=>_('Nuvarande lösenord verkar inte stämma.')], 401);
else:
$user->update(['password'=>bcrypt($request->get('password'))]);
return response()->json(['message'=>_('Ditt lösenord har ändrats')]);
endif;
}
/**
* @return \Illuminate\Http\JsonResponse
*/
public function getAuthenticatedUser(){
$user = \Auth::user();
$user->makeVisible([
'email',
'no_shooting_card_number',
'shooting_card_number',
'birthday',
'phone',
'mobile',
'gender',
'grade_trackshooting',
'grade_field'
]);
// the token is valid and we have found the user via the sub claim
return response()->json(compact('user'));
}
public function updateAuthenticatedUser(\App\Http\Requests\UserRequest $request){
try {
$user = \Auth::user();
$data = $request->all();
if($request->has('set_no_shooting_card_number')) $data['no_shooting_card_number'] = date('Y-m-d H:i:s');
if($request->has('shooting_card_number')) $data['no_shooting_card_number'] = null;
$user->update($data);
$user->makeVisible([
'email',
'no_shooting_card_number',
'shooting_card_number',
'birthday',
'phone',
'mobile',
'gender',
'grade_trackshooting',
'grade_field'
]);
return response()->json(compact('user'));
} catch (JWTException $e) {
if ($e instanceof TokenExpiredException) {
return response()->json(['token_expired'], $e->getStatusCode());
} else if ($e instanceof TokenBlacklistedException) {
return response()->json(['token_blacklisted'], $e->getStatusCode());
} else if ($e instanceof TokenInvalidException) {
return response()->json(['token_invalid'], $e->getStatusCode());
} else if ($e instanceof PayloadException) {
return response()->json(['token_expired'], $e->getStatusCode());
} else if ($e instanceof JWTException) {
return response()->json(['token_invalid'], $e->getStatusCode());
}
}
}
/**
* @param Request $request
*
* @return static
*/
public function register(\App\Http\Requests\RegistrationRequest $request){
try {
//Verify recaptcha request.
$verifyUrl = 'https://www.google.com/recaptcha/api/siteverify';
$verifyUrl .= '?hl=sv_SE';
$verifyUrl .= '&secret='.env('RECAPTCHA_SECRET_KEY');
$verifyUrl .= '&response='.$request->get('recaptcharesponse');
$recaptchaResponse = json_decode(file_get_contents($verifyUrl), true);
if(!isset($recaptchaResponse['success']) || $recaptchaResponse['success'] !== true):
return response()->json(['error' => 'recaptcha_error', 'message' => _('Någonting gick fel, vänligen försök igen.')], 500);
endif;
$data = $request->all();
$data['activation_code'] = md5($data['email'].time());
$data['password'] = bcrypt($request->get('password'));
$data['language'] = \App\Models\Languages::defaultLanguage();
$user = User::create($data);
/**
* Get userinvite based on email address and update the invite with a timestamp.
* If the request has an invite_token check if the token is present as an id.
*/
$inviteQuery = Userinvite::where('email', $request->get('email'));
/* if($request->has('invite_token')):
$optimus = new \Jenssegers\Optimus\Optimus(env('OPTIMUS_PRIME'), env('OPTIMUS_INVERSE'), env('OPTIMUS_RANDOM'));
$inviteId = $optimus->decode($request->get('invite_token'));
$inviteQuery->orWhere('id', $inviteId);
endif;*/
if($invite = $inviteQuery->first()):
$invite->update(['registered_at'=>$user->created_at]);
endif;
/**
* Send activation e-mail works 2021-12-16
*/
if(env('APP_ENV') == 'local'):
$this->dispatch(new SendActivationEmail($user));
endif;
return response()->json('success');
} catch (JWTException $e) {
// something went wrong
return response()->json(['error' => 'Fel vid registrering', 'message' => _('Någonting gick fel, vänligen försök igen.')], 500);
}
}
public function cancelAccount()
{
$user = \Auth::user();路线的第一部分( routes /api.php):
<?php
use Illuminate\Http\Request;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the \\ RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
Route::post('/auth/register', ['as'=>'auth.register', 'uses'=>'Controllers/AuthenticateController@register']);
Route::group(['prefix'=>'v'.env('API_VERSION')], function(){
Route::post('activate', 'AuthenticateController@activate');
Route::post('register', 'AuthenticateController@register');
#Route::post('refresh', 'AuthenticateController@refresh');
Route::post('password/email', 'PasswordController@postEmail');
Route::post('password/reset', 'PasswordController@postReset');
Route::group(['prefix'=>'public'], function(){
Route::resource('competitions', 'PublicCompetitionsController', ['only' => ['index', 'show']]);
});
Route::group(['middleware'=>['auth:api', 'checkUserActive']], function(){
Route::get('authenticate/user', 'AuthenticateController@getAuthenticatedUser');
Route::put('authenticate/user', 'AuthenticateController@updateAuthenticatedUser');
Route::put('authenticate/updatePassword', 'AuthenticateController@updatePassword');
Route::post('authenticate/cancelAccount', 'AuthenticateController@cancelAccount');
Route::get('users/invite', 'AuthenticateController@getInvite');
Route::post('users/invite', 'AuthenticateController@sendInvite');
Route::put('clubs', ['as'=>'clubs.update', 'uses'=>'ClubsController@update']);
Route::get('clubs/getUserClub', ['as'=>'clubs.getUserClub', 'uses'=>'ClubsController@getUserClub']);
Route::post('clubs/addNewClub', ['as'=>'clubs.addNewClub', 'uses'=>'ClubsController@addNewClub']);尝试登录时获取此错误:
[2021-12-30 13:59:38] local.ERROR: count(): Parameter must be an array or an object that implements Countable {"userId":11,"exception":"[object] (ErrorException(code: 0): count(): Parameter must be an array or an object that implements Countable at /Users/ralph/onsdagWS7/webshooter_web_upgrade/app/Models/User.php:96)
[stacktrace]在user.php中:
public function getClubsIdAttribute()
{
if(!$this->relationLoaded('Clubs')):
$this->load('Clubs');
endif;
(96) return (count($this->Clubs->first())) ? $this->Clubs->first()->id : null;
}有什么问题吗?但我没有进入仪表板刀片时,点击“登录”,但它直接返回到登录页面。
发布于 2022-06-08 17:56:31
这不再是问题了。我已经成功地将系统升级到了Laravel9.17.0现在的版本。
https://stackoverflow.com/questions/70421023
复制相似问题