我刚刚升级到Laravel 5.7,现在我正在使用内置的电子邮件验证.然而,有两件事我无法弄清楚,主要问题是我如何自定义发送给用户以验证其电子邮件的电子邮件?如果用户更改了他们的电子邮件,我也无法弄清楚如何发送该电子邮件,但我可以将其保存为另一个线程.
我刚刚将Laravel项目从5.6更新到5.7.我升级的主要原因是我需要为我的项目添加电子邮件验证.完成所有升级步骤并根据Laravel文档实施电子邮件验证后,我收到错误消息.所以导致错误的步骤是这样的:
我使用了1路来测试,在我的..\routes\web.php文件中我有这行代码:
Route::get('dashboard', ['uses' => 'DashboardController@getDashboard'])->middleware('verified');
Run Code Online (Sandbox Code Playgroud)
当我尝试去那条路线时,它会将我重定向到..\views\auth\verify.blade.php的视图.在那里,我点击链接发送验证邮件.我收到电子邮件然后单击电子邮件中的按钮以验证我的电子邮件.它启动一个浏览器并开始在某处导航我,当它出现错误时:
Class signed does not exist
Run Code Online (Sandbox Code Playgroud)
经过大量研究后,我发现错误发生在新的VerificationController.php文件中,说明创建该文件,导致问题的代码行是:
$this->middleware('signed')->only('verify');
Run Code Online (Sandbox Code Playgroud)
如果我出注释此行,然后单击我的电子邮件按钮再然后它没有任何错误,我的用户email_verified_at列都与一个日期时间戳更新.
下面是整个VerificationController.pas,以防它解决问题:
<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\VerifiesEmails;
class VerificationController extends Controller
{
/*
|--------------------------------------------------------------------------
| Email Verification Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling email verification for any
| user that recently registered with the application. Emails may also
| be re-sent if the user didn't receive the original email message.
|
*/
use VerifiesEmails;
/**
* Where to …
Run Code Online (Sandbox Code Playgroud) 我只使用xcode大约一个月.我安装了xcode 6并创建了一个项目,该项目使用来自GitHub的stephencelis的SQLite.swift项目.一切都运行良好,我想我必须在今天早上无意中加载Xcode更新.我现在在xcode版本6.3上.现在,当我打开我的项目并执行构建时,我在我的一个单元中的一行中得到错误,该单元执行"导入SQLite".错误消息显示:"模块文件由较旧版本的编译器创建".之前我在SQLite源文件中有50多个错误,因此我下载了SQLite的最新zip并打开了该项目并执行了一个没有错误的构建.但是现在如果我回去编译我的项目,我会得到主题中提到的错误.
我想我只是不知道如何正确使用GitHub中的这些库,或者这是否特定于SQLite.任何帮助将不胜感激.
我正在使用 Laravel 5.5 和 PHP 7.1 我正在使用标准的内置 Auth 和中间件,我没有自定义任何内容。
我想在 api.php 路由文件中创建一个如下所示的路由:
Route::group(array('prefix' => 'mobile'), function () {
Route::get('requestaccess', ['uses' => 'MobileController@RequestAccess']);
});
Run Code Online (Sandbox Code Playgroud)
然后在我的 MobileController 中我会有这样的代码:
public function RequestAccess() {
try {
$input = request()->all();
$token = $input['token'];
//$page = $input['page'];
$user = User::where('mobile_access_token', $token)->first();
if (!$user)
return view('public.error', ['errorCode' => 901]);
if ($user->mobile_access_expires < Carbon::now())
return view('public.error', ['errorCode' => 902]);
// I tried with and without the second param (true)
if (!Auth::loginUsingId($user->id, true))
return view('public.error', ['errorCode' => 903]);
// …
Run Code Online (Sandbox Code Playgroud) 我最近将我的项目从 Laravel 5.6 更新到 5.7,并将 Laravel 文档中描述的电子邮件验证步骤添加到我的项目中。在我的开发机器(http)上一切正常,但是当我用所有更改更新我的生产服务器(https)时,当 Laravel 向我发送带有链接(签名路由)的电子邮件时,它为我生成了单击按钮或粘贴的链接进入我的浏览器 laravel 似乎无法验证它创建的签名。副作用是每次我单击按钮或将链接粘贴到浏览器中时,我都会收到错误消息:
403 抱歉,您无权访问此页面。
到目前为止我所追踪的是我在 laravel 的 ValidateSignature.php 类中找到了代码,并添加了一些日志消息。
public function handle($request, Closure $next)
{
Log::info('checking signature');
if ($request->hasValidSignature()) {
Log::info('signature is valid');
return $next($request);
}
Log::info('throwing InvalidSignatureException');
throw new InvalidSignatureException;
}
Run Code Online (Sandbox Code Playgroud)
更具体地说,我在 laravel 单元 UrlGenerator.php 中追踪了确切的问题,我在以下方法中添加了日志:
public function hasValidSignature(Request $request)
{
$original = rtrim($request->url().'?'.Arr::query(
Arr::except($request->query(), 'signature')
), '?');
$expires = Arr::get($request->query(), 'expires');
$signature = hash_hmac('sha256', $original, call_user_func($this->keyResolver));
Log::info('url: '.$original);
Log::info('expire: '.$expires);
Log::info(' new signature: '.$signature);
Log::info('link signature: '.$request->query('signature', ''));
Log::info('hash …
Run Code Online (Sandbox Code Playgroud) 我的服务器使用 SSL,因此我的所有路由/url 都使用 https。我最近在 Laravel 5.7 中发现了一个错误,该错误在尝试使用电子邮件验证时暴露出来,该错误在带有 https 的服务器上不起作用。我不会详细讨论该问题,因为我还有另一个问题。我想保持这个简单。我的 .env 文件中有以下设置:
APP_USE_HTTPS=true
APP_URL=https://www.example.com
APP_ENV=production
Run Code Online (Sandbox Code Playgroud)
我在 AppServiceProvider 的 boot() 方法中有以下内容
if (env('APP_USE_HTTPS')) {
Log::info('AppServiceProvider: forcing URLs to use https');
URL::forceScheme('https');
}
Run Code Online (Sandbox Code Playgroud)
这可能有点矫枉过正,但为了尝试解决这个问题,我还将以下代码放在我的 web.php 路由文件的顶部”
if (env('APP_USE_HTTPS')) {
Log::info('Routes: forcing URLs to use https');
URL::forceScheme('https');
}
Route::get('/', 'PublicController@getHome');
Route::get('home', 'PublicController@getHome');
Run Code Online (Sandbox Code Playgroud)
然后在我的 PublicController.getHome() 方法中我输入了以下代码:
public function getHome()
{
$currentPath= Request::fullUrl();
Log::info($currentPath);
return view('public.home');
}
Run Code Online (Sandbox Code Playgroud)
现在我转到浏览器并在地址栏中输入:
https://www.example.com
Run Code Online (Sandbox Code Playgroud)
我在日志文件中得到了这个:
AppServiceProvider: forcing URLs to use https
Routes: forcing URLs to use https
http://www.example.com
Run Code Online (Sandbox Code Playgroud)
正如您从最后一条日志消息中看到的那样,laravel 始终使用 http …
具体来说,我正在做的是在我的 AppServiceProvider->boot() 方法中,我正在创建一个如下所示的单例类:
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
$this->app->singleton('App\Support\PushNotificationHelper', function ($app) {
return new PushNotificationHelper();
});
}
}
Run Code Online (Sandbox Code Playgroud)
我用于将通知推送到移动应用程序的队列工作器作业需要 helper 类。当移动设备是 Apple 设备时,我需要建立 curl 连接并使连接在队列工作器作业的生命周期后持续存在。这就是为什么我使用单例来保持连接,如:
class PushNotificationHelper {
protected $http2Connection;
protected $http2Expire ;
public function getConnection($options) {
$this->http2Connection = curl_init();
curl_setopt_array($this->http2Connection, $options);
return $this->http2Connection;
}
Run Code Online (Sandbox Code Playgroud)
Apple 声称如果我反复连接和断开连接,那么他们将发出拒绝服务 (DOS)。我的应用程序每小时发送 1000 条通知。每当我使用连接时,我都会检查错误并在需要时关闭/重新打开连接,例如:
curl_close($http2Connection);
Run Code Online (Sandbox Code Playgroud)
但是,我想知道如何检测应用程序何时会永久关闭,以便我可以正常关闭连接。如果没有办法做到这一点,随着时间的推移,它会因为打开连接挂起而损害我的服务器,如果应用程序每天启动/停止几次,可以说运行数月吗?
另一种选择可能是有一个 curl 选项来告诉连接在很长时间后自动断开连接。(我每 4 小时强制关闭并重新打开一次)所以如果我可以告诉连接在至少 5 小时后自动关闭,那么它可能会自我清洁?
我正在使用Xcode 6.3
swift(我认为版本1.2).我的应用程序从Web上的自定义服务器下载照片.然后我希望它将具有给定文件名的照片保存到自定义相册中,该相册是通过照片框架创建的.我需要能够控制照片/文件名,因为我会跟踪我在数据库中下载的照片,然后需要按名称查看它们.
我创建了一个自定义的PhotoAlbum类,我试图包含所有与相册交互的逻辑.一旦我下载了一张照片,我可以调用以下代码,它可以创建相册并保存照片,但是正如您将在savePhoto()
方法中注意到的那样,我不知道在保存时使用photoName变量命名照片的位置/方式.最后,我还需要知道如何在loadPhoto()
方法中按名称检索照片.
感谢您提供的任何帮助/建议.
let myAlbum = PhotoAlbum("MyAlbum")
myAlbum.savePhoto(downloadedPhoto, 12)
class PhotoAlbum {
var albumName: String = ""
var albumExists: Bool = false
var assetCollection: PHAssetCollection!
var photosAsset: PHFetchResult!
init(albumName: String) {
self.albumName = albumName
self.initializeAlbum()
}
private func initializeAlbum() {
let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "title = %@", self.albumName)
let collection: PHFetchResult = PHAssetCollection.fetchAssetCollectionsWithType(.Album, subtype: .Any, options: fetchOptions)
if let firstObject: AnyObject = collection.firstObject {
self.albumExists = true
self.assetCollection = collection.firstObject …
Run Code Online (Sandbox Code Playgroud) 我有一个 laravel 项目,刚刚从 8.x 升级到最新的 9.x。作为升级的一部分,它需要许多其他组件,例如文件系统(我猜称为 Flysystem)也从 1.x 升级到 3.x。我有一行代码现在导致我的系统崩溃:
if (Storage::disk($disk)->exists($avatarFilename)) {
Run Code Online (Sandbox Code Playgroud)
这以前一直有效,但现在又回来了:
ERROR: Unable to check existence for: avatars/31-feea15debc.png
[stacktrace]
#0 D:\\vhosts\\vendor\\league\\flysystem-aws-s3-v3\\AwsS3V3Adapter.php(157): League\\Flysystem\\UnableToCheckExistence::forLocation('avatars/31-feea...', Object(Aws\\S3\\Exception\\S3Exception))
#1 D:\\vhosts\\vendor\\league\\flysystem\\src\\Filesystem.php(48): League\\Flysystem\\AwsS3V3\\AwsS3V3Adapter->directoryExists('avatars/31-feea...')
#2 D:\\vhosts\\vendor\\laravel\\framework\\src\\Illuminate\\Filesystem\\FilesystemAdapter.php(174): League\\Flysystem\\Filesystem->has('avatars/31-feea...')
#3 D:\\vhosts\\app\\Models\\User.php(1120): Illuminate\\Filesystem\\FilesystemAdapter->exists('avatars/31-feea...')
#4 D:\\vhosts\\scoutek.com\\storage\\framework\\views\\eb5469bb9d755dff931d80dd79d9a76a9a7a2a21.php(10): App\\Models\\User->getAvatar()
Run Code Online (Sandbox Code Playgroud)
在深入研究 Laravel 日志文件中报告的数千行后,我发现以下内容看起来是异常的原因:
(Aws\\S3\\Exception\\S3Exception(code: 0): Error executing
\"ListObjects\" on
\"https://scoutek-development.s3.amazonaws.com/?prefix=avatars%2F31-feea15debc.png%2F&max-keys=1&delimiter=%2F&encoding-type=url\";
AWS HTTP error: cURL error 60: SSL certificate problem:
unable to get local issuer certificate
(see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for
Run Code Online (Sandbox Code Playgroud)
我已经使用 OpenSSL 并创建了我的密钥和证书文件,并在 apache conf 文件中引用了它们,当我运行 phpinfo() 时,我可以看到我在创建证书时输入的所有本地主机证书数据,因此 php 似乎知道该证书。我正在运行 WAMP 3.2.3、PHP 8.1.5、Apache 2.4.46
laravel ×6
php ×4
email ×2
swift ×2
xcode ×2
amazon-s3 ×1
curl ×1
frameworks ×1
http ×1
https ×1
ios ×1
laravel-5.7 ×1
laravel-9 ×1
photo ×1
redirect ×1
routes ×1
sqlite.swift ×1
ssl ×1
verification ×1