首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Laravel5.3系统制作laravel系统7但无法登录

基于Laravel5.3系统制作laravel系统7但无法登录
EN

Stack Overflow用户
提问于 2021-12-20 11:20:19
回答 1查看 109关注 0票数 0

当我按下登录后,设置电子邮件和密码,它只是眨眼,其他什么都没有发生。我有一个带有Oauth2登录的大型护照系统。

这是一个正常工作的系统,但在V.5.3:https://test.webshooter.se中,在Laravel 7系统中,我可以做任何事情,比如显示竞赛、地图、注册用户、重置密码、收发电子邮件,但无法登录。到目前为止,我已经以这样一种方式对用户进行了身份验证,即在数据库中为单击的每个登录注册oauth_refresh_tokens和oauth_access_tokens。

以下是登录刀片:

代码语言:javascript
复制
<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')}} &raquo;</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的一部分:

代码语言:javascript
复制
<?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):

代码语言:javascript
复制
<?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']);

尝试登录时获取此错误:

代码语言:javascript
复制
[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中:

代码语言:javascript
复制
    public function getClubsIdAttribute()
    {
        if(!$this->relationLoaded('Clubs')):
            $this->load('Clubs');
        endif;

(96)        return (count($this->Clubs->first())) ? $this->Clubs->first()->id : null;
    }

有什么问题吗?但我没有进入仪表板刀片时,点击“登录”,但它直接返回到登录页面。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-08 17:56:31

这不再是问题了。我已经成功地将系统升级到了Laravel9.17.0现在的版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70421023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档