当前位置: 首页 > 知识库问答 >
问题:

Laravel在服务器上失败,但在本地主机上运行良好

马弘益
2023-03-14

我开发了一个React应用程序,它使用Laravel作为API。我已经通过Passport添加了登录,并且已经相当成功地使用了个人访问客户端方法。我可以添加新用户和令牌,我可以撤销令牌,我可以重置密码...所有的API调用(除了登录和注册)都由API中间件保护,它可以工作。如果我从任何这些调用的头中删除载体${token},则由于->middleware('auth:api')包装器,它将返回401未经验证。

一切都完全按照预期运行...直到我把所有东西都移到我的Raspberry Pi服务器上。一旦我移动了所有东西,我就可以登录,我就可以注册,但一旦我在流中的任何endpoint调用上使用新的承载令牌,它就会立即失败,因为401未经验证。我运行PHP artisan Passport:client-personal命令,并像往常一样成功地将id和秘密输入到我的.env文件中。我安装了所有的composer和vendor软件包。我安装了所有passport包和CLI命令。

它只在使用身份验证中间件的调用时失败。

我做了一些挖掘,似乎我能找到的唯一改变(重要的)是Pi运行了一个32位PHP,而我的本地主机运行的是一个64位PHP。除此之外,还有相同的代码、DB、Laravel和PHP版本,所有的东西。

我能发现的唯一可能是个问题的其他事情是:

  1. 所有令牌都是在表“oauth_access_tokens”下名为“redirect”的数据库列中使用redirect_uri创建的,即http://localhost。无论我做什么,它总是本地主机,而不是我的服务器域或IP地址(这是相关的)
  2. 我的“Users”表(由passport命令生成)中的email_verified_at列为null,因为我无法在本地主机上设置passport的“忘记我的密码”流,因为电子邮件不会在本地主机上发出。

我设置的是:

public function boot()
{
    $this->registerPolicies();

    Passport::pruneRevokedTokens();
    Passport::tokensExpireIn(Carbon::now()->addDays(1));
    Passport::refreshTokensExpireIn(Carbon::now()->addDays(14));
    Passport::personalAccessTokensExpireIn(Carbon::now()->addDays(1));
}

AuthServiceProvider类

public function register(Request $request) {
    $validatedData = $request->validate([
        'image_url' => 'required',
        'last_name' => 'required|max:55',
        'image_url' => 'required|max:250',
        'first_name' => 'required|max:55',
        'password' => 'required|confirmed',
        'email' => 'email|required|unique:users',
    ]);

    $validatedData['password'] = bcrypt($request->password);


    if ($request->hasFile('image_url')) {
        $imageFile = $request->file('image_url');
        $imageExtension = $imageFile->extension();

        if (strtolower($imageExtension) === 'png' || strtolower($imageExtension) === 'jpg') {
            $validatedData['image_url'] = Storage::url( $request->file('image_url')->store('user_pics', 'public') );
        }
    
        $user = User::create($validatedData);
        
        date_default_timezone_set('UTC');
        $date = new \DateTime( date('Y-m-d H:i:s') );
        $user->email_verified_at = $date->format('c');

        $accessToken = $user->createToken('authToken-'.$user->id, ['*'])->accessToken;

        return response([ 'user' => $user, 'access_token' => $accessToken ]);

    } else {
        abort(404, 'Cannot register user without a user image!');
    }
}


public function login(Request $request) {
    $loginData = $request->validate([
        'email' => 'email|required',
        'password' => 'required'
    ]);

    if (!auth()->attempt($loginData)) {
        return response()->json(['statusText' => 'Unauthorized'], 401);
    }

    $user = auth()->user();
    $accessToken = auth()->user()->createToken('authToken-'.$user->id, ['*'])->accessToken;

    return response([ 'user' => $user, 'access_token' => $accessToken ]);
}


public function logout(Request $request) {
    if (auth()->guard('api')->check()) {
        auth()->guard('api')->user()->OauthAcessToken()->delete();

        return response()->json([ 'msg' => 'Successfully logged out!' ]);
    
    } else {
        return abort(404, 'Must be logged in to log a user out');
    }
}


public function refreshToken(Request $request) {
    if (auth()->guard('api')->check()) {
        $user = auth()->user();
        $accessToken = auth()->user()->createToken('authToken-'.$user->id, ['*'])->accessToken;

        return response([ 'user' => $user, 'access_token' => $accessToken ]);
    
    } else {
        return abort(404, 'Must be logged in to refresh a token!');
    }
}

AuthController类

'defaults' => [
    'guard' => 'web',
    'passwords' => 'users',
],

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'passport',
        'provider' => 'users'
    ],
],

配置/auth.php

APP_NAME=MyName
APP_ENV=dev
APP_DEBUG=true
APP_URL=http://192.168.1.1
PASSPORT_PERSONAL_ACCESS_CLIENT_ID="1"
PASSPORT_PERSONAL_ACCESS_CLIENT_SECRET="[SOME LONG HASH]"

.env文件

共有1个答案

马渊
2023-03-14

我没有足够的声誉来评论,所以在这里说…

php artisan passport:keys

您是否在部署服务器上运行了上述命令?

 类似资料:
  • 尽管CAS服务器在Tomcat下工作得很好,但我有一些问题要使它在WebLogic12c下工作。在Weblogic上部署之前,我遵循以下指南:https://github.com/gentics/gentics-sso-cas/wiki/oracle-weblogic-configuration在webcontent/web-inf/with content中添加文件Weblogic.xml:

  • CSS文件夹比html高一个,我认为我用CSS/样式解决了它

  • 我有一个问题,我的Bootstrap/PHP代码在XAMPP上工作得很好localhost但是当我把它上传到服务器上安装了Apache和MySQL的 /var/www文件夹时,突然看起来像. htaccess有问题。那我该怎么办?我需要在我的VPS上安装一些东西吗,比如XAMPP?VPSLinuxUbuntu Debian-7.0(64位)。 我的. htaccess文件:

  • 问题内容: 我在CI和CD上创建了Jenkinsfile,Dockerfile,Dockerfile.test到CI和CD,在GitHub上构建了我的服务器API,我在Jenkins上构建了该构建,并且构建成功,并且我的docker在Jenkinsfile阶段也在容器上运行,我创建了用于测试和部署在服务器API上,并使用docker作为容器 我也使用docker-compose在docker上运行

  • 我试着简单地在我的路线和渲染产品中获取照片的位置。ejs文件: 它在本地主机上工作,现在我导入我的路由。在real server中的js文件,当我尝试打开产品时,它抛出504错误。 试图按照这个指示,但没有帮助。 获得504GATEWAY_TIMEOUTNodeJs grep-i“504”/var/log/nginx/access。日志 82.135.208.60--[2019年9月16日:07:

  • 我试图在非自定义端口(例如25565)上使用命令启动minecraft服务器: java-jar craftbukkit.jar [12:24:27 WARN]:要启动具有更多ram的服务器,请将其启动为“java-xmx1024m-xms1024m-jar minecraft_server.jar” [12:24:27信息]:正在加载属性 [12:24:27信息]:默认游戏类型:生存 [12:2